Sigueme en Facebook Sigueme en Twitter Sigueme en Instagram Sigueme en Youtube
JC Mouse Bolivia
Index / Kotlin / CUF: Código Único en Kotlin

CUF: Código Único en Kotlin

Autor jc mouse lunes, febrero 25, 2019

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.

SFE

 

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:

Codigo Unico Impuestos

enjoy!!!

Tags

Si te ha gustado podrías compartirlo o dejar un comentario. ¡Muchas gracias!
Autor: JC Mouse

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! :)

También Te Podría Interesar

Blog MVC – Carga de páginas estáticas [p4]

Blog MVC – Carga de páginas estáticas [p4]

Cuarta parte de esta pequeña serie de tutoriales sobre [Crea tu blog con el patrón MVC y php] En esta cuarta entrega ver...

Reproductor de video con VLCJ

Reproductor de video con VLCJ

VLC Media Player es un reproductor multimedia de código abierto muy popular desarrollado por el proyecto VideoLAN. VLCJ...

Bloquear orientación de la pantalla

Bloquear orientación de la pantalla

Cuando escribimos aplicaciones para android debemos tener cuidado al diseñar la interfaz en la posición que tomaran los...

Cifrado francmasón PigPen

Cifrado francmasón PigPen

El cifrado francmasón es un cifrado por sustitución simple que cambia las letras por símbolos. Sin embargo, el uso de sí...

Impuestos Bolivia :: Código de Control en C#

Impuestos Bolivia :: Código de Control en C#

Hola 🙂 en esta post se deja a disposición de la comunidad de programadores  que quiera aprender un poquito sobre Factura...

Default Methods

Default Methods

Uno de los cambios principales introducidos a las interfaces en  Java 8 fue que estos puedan tener métodos concretos, es...

Comparte lo que sabes

Categorias

Últimas entradas

El modelo Tweetbotornot es un algoritmo de aprendizaje automático que se entrenó en miles de cuentas reales de bot y no...

Melody.ml  es un aplicación online que usa la I.A (Inteligencia Artificial) para procesar archivos MP3 y separar en pist...

Small Basic es un lenguaje de programación propiedad de Microsoft creado especialmente para ayudar a los estudiantes a p...

Lorca Editor es una aplicación online creada por el desarrollador español Domingo Martin el cual tiene como objetivo el...

Herramientas

Generador de Enlaces a Whatsapp