45 lines
1.2 KiB
Go
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
|
|
}
|