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!!!
El cifrado francmasón es un cifrado por sustitución simple que cambia las letras por símbolos. Sin embargo, el uso de sí[...]
Modelo Vista Controlador (MVC) es un patrón de arquitectura de software que separa los datos de una aplicación, la inter[...]
En este tutorial veremos la forma de conectarse a una base de datos de Firebird utilizando el lenguaje Java y el IDE Net[...]
Google abre las puertas de Google Open Source un nuevo sitio web que une todos sus proyectos de «Código Abierto» que ha[...]
Geany es un editor de texto para Sistemas Operativos Linux, windows y MAC que utiliza el kit de herramientas GTK+ con ca[...]
En este post veremos una pequeña introducción a lo que son las animaciones con LibGDX y el uso de sprites. ¿Que es la an[...]