2025-05-17 11:36:26 -04:00

45 lines
1.2 KiB
Go

package algoritmo
import (
"strings"
)
// Genera el CUF
func GenerateCUF(
nit string,
fechaHora string,
sucursal string,
modalidad string,
tipoEmision string,
tipoFactura string,
tipoDocumentoSector string,
numeroFactura string,
puntoVenta string,
codigoControl string,
) string {
// Rellenar todos los campos con ceros a la izquierda
nit = completarConCeros(nit, 13)
fechaHora = completarConCeros(fechaHora, 17)
sucursal = completarConCeros(sucursal, 4)
modalidad = completarConCeros(modalidad, 1)
tipoEmision = completarConCeros(tipoEmision, 1)
tipoFactura = completarConCeros(tipoFactura, 1)
tipoDocumentoSector = completarConCeros(tipoDocumentoSector, 2)
numeroFactura = completarConCeros(numeroFactura, 10)
puntoVenta = completarConCeros(puntoVenta, 4)
// Concatenar los 53 caracteres
cadenaBase := nit + fechaHora + sucursal + modalidad + tipoEmision + tipoFactura + tipoDocumentoSector + numeroFactura + puntoVenta
// Calcular dígito verificador y agregar al final
verificador := calcularModulo11(cadenaBase)
cadenaCompleta := cadenaBase + verificador
// Convertir a base 16
cadenaHex := convertirABase16(cadenaCompleta)
// Concatenar con el código de control (CUFD)
cuf := cadenaHex + strings.ToUpper(codigoControl)
return cuf
}