En este post implementamos en lenguaje Kotlin (lenguaje de programación de tipado estático que corre sobre la máquina virtual de Java) el CUF o Código Único de Factura del nuevo sistema de facturación electrónica de Impuestos Bolivia.
Si deseas el CUF (Código Único de Factura) en otro lenguaje de programación pídelo en la sección de comentarios, por el momento tenemos disponible el CUF en lenguaje java, c# (C Sharp) y PHP.
import java.math.BigInteger fun main(args: Array < String > ) { val cuf = obtenerCUF("123456789", "20190113163721255", 0, 2, 2, 2, 21, 44, 0) println("Codigo esperado: 159FFE6FB1986A24BB330EB811413B64FB8D4385") println("Codigo generado: " + cuf) println( if ("159FFE6FB1986A24BB330EB811413B64FB8D4385".equals(cuf)) "Son iguales" else "No son iguales"); } /** * @param nit NIT emisor * @param fh Fecha y Hora en formato yyyyMMddHHmmssSSS * @param sucursal * @param mod Modalidad * @param temision Tipo de Emision * @param cdf Codigo Documento Fiscal * @param tds Tipo Documento Sector * @param nf Numero de Factura * @param pos Punto de Venta * @return CUF Codigo Unico de Factura */ fun obtenerCUF(nit: String, fh: String, sucursal: Int, mod: Int, temision: Int, cdf: Int, tds: Int, nf: Int, pos: Int): String { var cadena = "" /** * PASO 1 y PASO2 Completa con ceros cada campo y concatena todo en una * sola cadena */ cadena += String.format("%013d", BigInteger(nit)) cadena += fh cadena += String.format("%04d", sucursal) cadena += mod cadena += temision cadena += cdf cadena += String.format("%02d", tds) cadena += String.format("%08d", nf) cadena += String.format("%04d", pos) println("Paso 1 y 2: Completar con ceros y concatenar") println("> " + cadena); /** * Paso 3 Obtiene modulo 11 y adjunta resultado a la cadena */ val mod11 = calculaDigitoMod11(cadena, 1, 9, false) cadena += mod11 println("paso 3: Obtener Mod11 y adjuntar"); println("> Mod11: " + mod11); println("> " + cadena); /** * paso 4 Aplica base16 */ val cuf = BigInteger(cadena) println("Paso 4: Aplicar base 16") println("> " + cuf.toString(16)) return cuf.toString(16).toUpperCase() } /** * @see https://impuestos.gob.bo/ ALGORITMO BASE 11 ? MÓDULO 11 */ fun calculaDigitoMod11(dado: String, numDig: Int, limMult: Int, x10: Boolean): String { var mult: Int var soma: Int var i: Int var n: Int = 1 var dig: Int var numDig2: Int = numDig var dado2: String = dado if (!x10) { numDig2 = 1 } while (n <= numDig2) { soma = 0 mult = 2 i = dado2.length - 1 while (i >= 0) { soma += (mult * Integer.parseInt(dado2.substring(i, i + 1))) if (++mult > limMult) { mult = 2 } i-- } if (x10) { dig = ((soma * 10) % 11) % 10 } else { dig = soma % 11 } if (dig == 10) { dado2 += "1" } if (dig == 11) { dado2 += "0" } if (dig < 10) { dado2 += dig } n++ } return dado2.substring(dado2.length - numDig2, dado2.length) }
Ejecutando el código anterior tenemos:
enjoy!!!
Yo soy yo :) JC Mouse, Soy orgullosamente boliviano soy fundador y CEO de la web jc-Mouse.net uno de las pocas web en emprendimiento y tecnología en Bolivia.
Toda la información que encuentres en este sitio es y sera completamente gratis siempre, puedes copiar, descargar y re-publicar si así lo deseas en otros blogs o sitios web, solo te pido a cambio que dejes una referencia a esta web. Esto nos ayuda a crecer y seguir aportando. Bye
Enjoy! :)
Rompecabezas 3×3 realizado en Visual Basic .NET, lo que se hizo fue una migración de un proyecto hecho en java (pue...
Nivel: Intermedio-Avanzado IDE: Netbeans 6.9 o Sup. Tiempo: 30 minutos En este tutorial crearemos una aplicación que nos...
Segunda y ultima parte del post dedicado a la creación de un microservicio en lenguaje java utilizando el framework Spar...
Cuando desarrollamos aplicaciones en el IDE (Entorno de Desarrollo Integrado) de Android Studio, es importante indicar e...
En este post crearemos un componente gráfico para java que nos permitirá seleccionar la hora del día de una manera senci...
Online Flag Waver es una páginas web con la que podemos generar banderas ondeando con la textura que elijamos ya sea des...
El gigante tecnologico Google a puesto un bonito Doodle en su buscador que esta fascinando a sus millones de usuarios qu...
WhatsApp anuncio a través de su blog que ya se encuentra disponible la función de envío de fotos y videos TEMPORALES, es...
Muchas de las innovaciones computacionales de la NASA se desarrollaron para ayudar a explorar el espacio, pero ahora la...
TikTok es una plataforma de microvideos muy popular entre los jóvenes el cual cuenta ya con millones de videos cortps de...