Aprende Java Aprende Php Aprende C++ Aprende HTML 5 Aprende JavaScript Aprende JSON Aprende MySQL Aprende SQLServer Aprende Visual Basic 6 Aprende PostgreSQL Aprende SQLite Aprende Redis Aprende Kotlin Aprende XML Aprende Linux VSC Aprende Wordpress Aprende Laravel Aprende VueJS Aprende JQuery Aprende Bootstrap Aprende Netbeans Aprende Android
Sigueme en Facebook Sigueme en Twitter Sigueme en Instagram Sigueme en Youtube Sigueme en TikTok Sigueme en Whatsapp
Home / Kotlin / CUF: Código Único en Kotlin

CUF: Código Único en Kotlin

Por 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

Artículos similares

Introduccion a la programacion shell

En este post veremos una muy pequeña introducción de lo que es el mundo de la programación en shell de Linux. Necesitamo[...]

Juego de memoria para niños (Código Fuente)

En un post anterior, desarrollamos un swing para simular un efecto FLIP  y recibí algunos mensajes pidiéndome un ejemplo[...]

Hola Mundo con Firebase

Firebase es la plataforma para el desarrollo de aplicaciones web y aplicaciones móviles de Google el cual se centra en e[...]

Capturar foto desde una webcam con Java Media Framework

Como se vio en un post anterior (Capturar video de una webcam con JMF) la captura de un video desde una webcam utilizand[...]

Sistema de gestión de stock – El Controlador (Parte 5)

Para terminar el tutorial, debemos unir tanto la VISTA como el MODELO y para eso esta el CONTROLADOR. o.O El controlador[...]

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