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 / .Net / Código Único de Factura en C Sharp

Código Único de Factura en C Sharp

Por jc mouse lunes, febrero 11, 2019

En este post implementamos el «Código Único de Factura» según la documentación otorgada por Impuestos Bolivia en su sitio web impuestos.gob.bo y la Resolución Normativa de Directorio Nº 101800000026.

El lenguaje utilizado en este post es C# (C Sharp) propiedad de Microsoft como parte de su plataforma .NET. El compilador utilizado es .NET 4.7.2

SFE

using System;
using System.Numerics;

public class CodigoUnico {
 public static void Main() {
  String cuf = obtenerCUF("123456789", "20190113163721242", 0, 2, 1, 1, 10, 10, 0);
  Console.WriteLine("CUF: " + cuf);
 }

 /**
  * @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
  */
 public static String obtenerCUF(String nit, String fh, int sucursal, int mod, int temision, int cdf, int tds, int nf, int pos) {
  String cadena = "";

  /**
   * PASO 1 y PASO2 Completa con ceros cada campo y concatena todo en una
   * sola cadena
   */
  cadena += BigInteger.Parse(nit).ToString("D13");
  cadena += fh;
  cadena += sucursal.ToString("D4");
  cadena += mod;
  cadena += temision;
  cadena += cdf;
  cadena += tds.ToString("D2");
  cadena += nf.ToString("D8");
  cadena += pos.ToString("D4");

  /**
   * Paso 3 Obtiene modulo 11 y adjunta resultado a la cadena
   */
  String mod11 = calculaDigitoMod11(cadena, 1, 9, false);
  cadena += mod11;

  /**
   * paso 4 Aplica base16
   */
  BigInteger cuf = BigInteger.Parse(cadena);
  return cuf.ToString("X");
 }

 /**
  * @see https://impuestos.gob.bo/ ALGORITMO BASE 11 ? MÓDULO 11
  * Original en lenguaje java
  */
 public static String calculaDigitoMod11(String dado, int numDig, int limMult, bool x10) {
  int mult, soma, i, n, dig;
  if (!x10) {
   numDig = 1;
  }
  for (n = 1; n <= numDig; n++) {
   soma = 0;
   mult = 2;
   for (i = dado.Length - 1; i >= 1; i--) {
    soma += (mult * Int32.Parse(dado.Substring(i, 1)));

    if (++mult > limMult) {
     mult = 2;
    }
   }
   if (x10) {
    dig = ((soma * 10) % 11) % 10;
   } else {
    dig = soma % 11;
   }
   if (dig == 10) {
    dado
     += "1";
   }
   if (dig == 11) {
    dado
     += "0";
   }
   if (dig < 10) {
    dado += dig;
   }
  }
  return dado.Substring(dado.Length - numDig, 1);
 }

}

Ejecutando el código anterior obtenemos el Código Único de Factura:

CUF VB NET

De la misma forma que hicimos con java, utilizamos la «Batería de Pruebas de Generación de CUF» para probar el correcto funcionamiento de nuestro código:

CUF> 1.- 159FFE6FB1986A24BB32DBE5A2A34214B245A6A3 = 159FFE6FB1986A24BB32DBE5A2A34214B245A6A3 -> True
CUF> 2.- 159FFE6FB1986A24BB32EAB8592FA23EE2CA4D48 = 159FFE6FB1986A24BB32EAB8592FA23EE2CA4D48 -> True
CUF> 3.- 159FFE6FB1986A24BB32EAB857CFF35D787AF3E4 = 159FFE6FB1986A24BB32EAB857CFF35D787AF3E4 -> True
CUF> 4.- 159FFE6FB1986A24BB32ECD6730CF0AB8D2C1A89 = 159FFE6FB1986A24BB32ECD6730CF0AB8D2C1A89 -> True
CUF> 5.- 159FFE6FB1986A24BB32ECD671AD41CA22DCC125 = 159FFE6FB1986A24BB32ECD671AD41CA22DCC125 -> True
CUF> 6.- 159FFE6FB1986A24BB32ECD673141DD973A167C5 = 159FFE6FB1986A24BB32ECD673141DD973A167C5 -> True
CUF> 7.- 159FFE6FB1986A24BB32EEF48B8A9036CD3E8E61 = 159FFE6FB1986A24BB32EEF48B8A9036CD3E8E61 -> True
CUF> 8.- 159FFE6FB1986A24BB32F112A6D23600D0433506 = 159FFE6FB1986A24BB32F112A6D23600D0433506 -> True
CUF> 9.- 159FFE6FB1986A24BB32F112A572871F65F3DBA2 = 159FFE6FB1986A24BB32F112A572871F65F3DBA2 -> True
CUF> 10.- 159FFE6FB1986A24BB32F330C0AF846D7AA50240 = 159FFE6FB1986A24BB32F330C0AF846D7AA50240 -> True
CUF> 11.- 159FFE6FB1986A24BB32F330BF4FD58C1055A8E7 = 159FFE6FB1986A24BB32F330BF4FD58C1055A8E7 -> True
CUF> 12.- 159FFE6FB1986A24BB32F330C0B6B19B611A4F87 = 159FFE6FB1986A24BB32F330C0B6B19B611A4F87 -> True
CUF> 13.- 159FFE6FB1986A24BB32F54ED92D23F8BAB77628 = 159FFE6FB1986A24BB32F54ED92D23F8BAB77628 -> True
CUF> 14.- 159FFE6FB1986A24BB32F54EDA9400080B7C1CC8 = 159FFE6FB1986A24BB32F54EDA9400080B7C1CC8 -> True
CUF> 15.- 159FFE6FB1986A24BB32F54ED9345126A12CC364 = 159FFE6FB1986A24BB32F54ED9345126A12CC364 -> True
CUF> 16.- 159FFE6FB1986A24BB32F76CF4714E74B5DDEA09 = 159FFE6FB1986A24BB32F76CF4714E74B5DDEA09 -> True
CUF> 17.- 159FFE6FB1986A24BB32F76CF3119F934B8E90A5 = 159FFE6FB1986A24BB32F76CF3119F934B8E90A5 -> True
CUF> 18.- 159FFE6FB1986A24BB32F98B0E59455D4E933741 = 159FFE6FB1986A24BB32F98B0E59455D4E933741 -> True
CUF> 19.- 159FFE6FB1986A24BB32F98B0CEEEDFFF5F05DE6 = 159FFE6FB1986A24BB32F98B0CEEEDFFF5F05DE6 -> True
CUF> 20.- 159FFE6FB1986A24BB32FBA9283693C9F8F50486 = 159FFE6FB1986A24BB32FBA9283693C9F8F50486 -> True
CUF> 21.- 159FFE6FB1986A24BB32FBA926D6E4E88EA5AB22 = 159FFE6FB1986A24BB32FBA926D6E4E88EA5AB22 -> True
CUF> 22.- 159FFE6FB1986A24BB32FDC74213E236A356D1C7 = 159FFE6FB1986A24BB32FDC74213E236A356D1C7 -> True
CUF> 23.- 159FFE6FB1986A24BB32FDC740B4335539077863 = 159FFE6FB1986A24BB32FDC740B4335539077863 -> True
CUF> 24.- 159FFE6FB1986A24BB32FDC7421A3E357D7FBF04 = 159FFE6FB1986A24BB32FDC7421A3E357D7FBF04 -> True
CUF> 25.- 159FFE6FB1986A24BB32FFE55A90B092D71CE5A5 = 159FFE6FB1986A24BB32FFE55A90B092D71CE5A5 -> True
CUF> 26.- 159FFE6FB1986A24BB32FFE55C1B139497A28C43 = 159FFE6FB1986A24BB32FFE55C1B139497A28C43 -> True
CUF> 27.- 159FFE6FB1986A24BB32FFE55ABB64B32D5332E1 = 159FFE6FB1986A24BB32FFE55ABB64B32D5332E1 -> True
CUF> 28.- 159FFE6FB1986A24BB33020375F8620142045984 = 159FFE6FB1986A24BB33020375F8620142045984 -> True
CUF> 29.- 159FFE6FB1986A24BB3302037498B31FD7B50020 = 159FFE6FB1986A24BB3302037498B31FD7B50020 -> True
CUF> 30.- 159FFE6FB1986A24BB33020375FF8F2F2879A6C2 = 159FFE6FB1986A24BB33020375FF8F2F2879A6C2 -> True
CUF> 31.- 159FFE6FB1986A24BB3304218E76018C8216CD67 = 159FFE6FB1986A24BB3304218E76018C8216CD67 -> True
CUF> 32.- 159FFE6FB1986A24BB3304218FDCDD9BD2DB7407 = 159FFE6FB1986A24BB3304218FDCDD9BD2DB7407 -> True
CUF> 33.- 159FFE6FB1986A24BB33063FA85DF8751ACC1AA1 = 159FFE6FB1986A24BB33063FA85DF8751ACC1AA1 -> True
CUF> 34.- 159FFE6FB1986A24BB33063FA9BA2C087D3D4141 = 159FFE6FB1986A24BB33063FA9BA2C087D3D4141 -> True
CUF> 35.- 159FFE6FB1986A24BB33063FA85A7D2712EDE7E6 = 159FFE6FB1986A24BB33063FA85A7D2712EDE7E6 -> True
CUF> 36.- 159FFE6FB1986A24BB33085DC3A222F115F28E82 = 159FFE6FB1986A24BB33085DC3A222F115F28E82 -> True
CUF> 37.- 159FFE6FB1986A24BB33085DC237CB93BD4FB527 = 159FFE6FB1986A24BB33085DC237CB93BD4FB527 -> True
CUF> 38.- 159FFE6FB1986A24BB330A7BDD7F715DC0545BC3 = 159FFE6FB1986A24BB330A7BDD7F715DC0545BC3 -> True
CUF> 39.- 159FFE6FB1986A24BB330A7BDC1FC27C56050261 = 159FFE6FB1986A24BB330A7BDC1FC27C56050261 -> True
CUF> 40.- 159FFE6FB1986A24BB330A7BDD7BF60FB8762901 = 159FFE6FB1986A24BB330A7BDD7BF60FB8762901 -> True
CUF> 41.- 159FFE6FB1986A24BB330C99F5FD10E90066CFA2 = 159FFE6FB1986A24BB330C99F5FD10E90066CFA2 -> True
CUF> 42.- 159FFE6FB1986A24BB330C99F763ECF8512B7642 = 159FFE6FB1986A24BB330C99F763ECF8512B7642 -> True
CUF> 43.- 159FFE6FB1986A24BB330C99F5F9959AF8889CE9 = 159FFE6FB1986A24BB330C99F5F9959AF8889CE9 -> True
CUF> 44.- 159FFE6FB1986A24BB330EB811413B64FB8D4385 = 159FFE6FB1986A24BB330EB811413B64FB8D4385 -> True
CUF> 45.- 159FFE6FB1986A24BB330EB80FE18C83913DEA21 = 159FFE6FB1986A24BB330EB80FE18C83913DEA21 -> True
CUF> 46.- 159FFE6FB1986A24BB3310D62B1E89D1A5EF10C6 = 159FFE6FB1986A24BB3310D62B1E89D1A5EF10C6 -> True
CUF> 47.- 159FFE6FB1986A24BB3310D629BE09C12F535763 = 159FFE6FB1986A24BB3310D629BE09C12F535763 -> True
CUF> 48.- 159FFE6FB1986A24BB3312F44505AF8B3257FE01 = 159FFE6FB1986A24BB3312F44505AF8B3257FE01 -> True
CUF> 49.- 159FFE6FB1986A24BB3312F4439B582DD9B524A4 = 159FFE6FB1986A24BB3312F4439B582DD9B524A4 -> True
CUF> 50.- 159FFE6FB1986A24BB3315125EE2FDF7DCB9CB42 = 159FFE6FB1986A24BB3315125EE2FDF7DCB9CB42 -> True

enjoy!!!

Tags

Artículos similares

Rompecabezas en C# (Tutorial)

En este tutorial crearemos un sencillo rompecabezas de un tamaño de 4×6 con 24 piezas que se podrán mover haciendo[...]

JCheckBox dentro JTable con Netbeans

Para colocar un JCheckBox dentro una celda de un JTable debemos sobre escribir algunas clases para que el componente pue[...]

Facturación electrónica: El Código de Control

¿Que es la facturación electrónica? Una factura es un documento que sirve para describir el costo de los servicios y des[...]

Cargar fuente TTF

Necesitamos: Android Studio 2 tipos de fuente TTF Agregar Archivo de fuente al proyecto Paso 1: Crear carpeta assets Cli[...]

Guardar y Leer imagenes en PostgresSQL

En este tutorial veremos una forma para registrar archivos JPG en una base de datos PostgreSQL y recuperarlos para utili[...]

El Convenio de Budapest

El Convenio de Budapest también conocido como el Convenio sobre ciberdelincuencia, es el primer tratado internacional so[...]