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

Manejo de BLOB: Escritura y lectura de archivos

Manejo de BLOB: Escritura y lectura de archivos

Un BLOB en SQL es un tipo incorporado que almacena un Objeto Binario Grande como un valor de columna en una fila de una...

Primeros pasos con Quasar Framework

Primeros pasos con Quasar Framework

Quasar es un proyecto Open Source basado en el Framework Vue que nos permite desarrollar proyectos de todo tipo, por eje...

Simplifica tu código

Simplifica tu código

Project Lombok es una biblioteca para java que se conecta con su IDE (Integrated Development Environment – Entorno...

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...

Libreria swing BlackTabbedPane

Libreria swing BlackTabbedPane

Continuación del tutorial [Personalizar JTabbedPane con Netbeans]. La clase BlackTabbedPaneUI que extendemos de BasicTab...

CUF: Código Único de Factura

CUF: Código Único de Factura

Este 2019 se implementara en Bolivia un nuevo Sistema de Facturación Electrónica con nuevas características y medidas de...

Comparte lo que sabes

Categorias

Últimas entradas

Si trabajas con redes sociales (RRSS) a continuación te muestro tres herramintas gratuitas que te ayudaran a la hora de...

Por lo general se usan transacciones a nivel base de datos y posteriormente se llaman estos a través de procedimientos a...

En este post, aprenderemos como conectar Visual Basic 6 con SQL Server, abrir una tabla, leer su contenido y mostrar est...

Lo que veremos en este post es la configuración del driver para PHP de SQL Server que ha creado Microsoft el cual permit...

Herramientas

Generador de Enlaces a Whatsapp