Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Proyecto SIF/Veri*Factu/Ley Antifraude > Envío de registros y sus respuestas
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 18-12-2024
razorxxx razorxxx is offline
Miembro
 
Registrado: jul 2015
Posts: 202
Poder: 12
razorxxx Va por buen camino
En Delphi, la función para calcular la huella SHA-256 es sencilla:

Código Delphi [-]
function GetSHA256HashOfString(const Texto: String): String;
begin
       Result := THashSHA2.GetHashString(Texto, THashSHA2.TSHA2Version.SHA256);
end;

Y aquí la llamada, creando primero la cadena con los campos que pide Verifactu (en este ejemplo, los campos están en TEdit en pantalla):

Código Delphi [-]
procedure CalcularHuella;
var
   Cadena: String;
begin
     // Formar la cadena de entrada desde la que se calculará el hash
     Cadena := 'IDEmisorFactura=' + Trim(NIF.Text) + '&';
     Cadena := Cadena + 'NumSerieFactura=' + Trim(NumSerieFac.Text) + '&';
     Cadena := Cadena + 'FechaExpedicionFactura=' + Trim(FechaExpe.Text) + '&';
     Cadena := Cadena + 'TipoFactura=' + Trim(TipoFac.Text) + '&';
     Cadena := Cadena + 'CuotaTotal=' + Trim(Cuota.Text) + '&';
     Cadena := Cadena + 'ImporteTotal=' + Trim(Importe.Text) + '&';
     Cadena := Cadena + 'Huella=' + Trim(HuellaAnterior.Text) + '&';
     Cadena := Cadena + 'FechaHoraHusoGenRegistro=' + Trim(FechaGenReg.Text);
     Consola.Lines.Add('Cadena de entrada: ' + Cadena);
     // Calcular el hash SHA-256 de la cadena formada anteriormente y devolverlo en mayúsculas como exige Veri*Factu
     Consola.Lines.Add('Cadena de salida: ' + AnsiUpperCase(GetSHA256HashOfString(Cadena)));
end;

Lo probé con el ejemplo que aparece en la documentación de la AEAT y devuelve exactamente el mismo hash. Imprescindible poner en el uses la unit System.Hash
Responder Con Cita
  #2  
Antiguo 24-01-2025
netsistemas netsistemas is offline
Registrado
 
Registrado: ene 2025
Posts: 2
Poder: 0
netsistemas Va por buen camino
Formateo Fecha.

Ojo con la función publicada. El formateo de la fecha yo creo que está mal:
debe ser dd-MM-yyyy

Código:
        ' Genera la referencia concatenada
        Dim ref As String = GetReferenciaRegistroAlta(nifEmisor, numFacturaSerie, fechaExpedicion.ToString("dd-MM-yyyy"),
                                                          tipoFactura, cuotaTotal, importeTotal, huellaAnterior, fechaHoraUsoRegistro)
Responder Con Cita
  #3  
Antiguo 28-01-2025
Jarogo08 Jarogo08 is offline
Miembro
 
Registrado: ene 2025
Posts: 344
Poder: 2
Jarogo08 Va por buen camino
Yo lo hago así en VB .NET:



Código:
 Public Function HuellaVerifactu_Alta(ByVal IDEmisorFactura As String, ByVal NumSerieFactura As String, ByVal FechaExpedicionFactura As Date, ByVal TipoFactura As String, _
                                       ByVal CuotaTotal As Decimal, ByVal ImporteTotal As Decimal, ByVal Huella As String, ByVal FechaHoraHusoGenRegistro As String) As String

        Dim HuellaVerifactu As String = ""

        Dim Cadena As String = ""
        Cadena += "IDEmisorFactura=" & IDEmisorFactura & "&"
        Cadena += "NumSerieFactura=" & NumSerieFactura & "&"
        Cadena += "FechaExpedicionFactura=" & Format(FechaExpedicionFactura, "dd-MM-yyyy") & "&"
        Cadena += "TipoFactura=" & TipoFactura & "&"
        Cadena += "CuotaTotal=" & CuotaTotal.ToString.Replace(",", ".") & "&"
        Cadena += "ImporteTotal=" & ImporteTotal.ToString.Replace(",", ".") & "&"
        Cadena += "Huella=" & Huella & "&"
        Cadena += "FechaHoraHusoGenRegistro=" & FechaHoraHusoGenRegistro

        HuellaVerifactu = ObtenerHashVerifactu(Cadena)

        Return HuellaVerifactu
    End Function

    Public Function ObtenerHashVerifactu(ByVal cadena As String) As String
        Using sha256 As SHA256 = sha256.Create()
            Dim array As Byte() = sha256.ComputeHash(Encoding.UTF8.GetBytes(cadena))
            Return BitConverter.ToString(array).Replace("-", "").ToUpper
        End Using
    End Function

Como dicen arriba, hay que tener cuidado con los formatos de los campos (sobretodo FechaHoraHusoGenRegistro) porque si no tiene el formato esperado dará error.


Espero que le pueda servir a alguien
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Software para control del personal con huella digital santiago14 Varios 3 15-03-2013 16:10:27
Componente para huella digital rex Varios 1 17-05-2006 18:33:52
Lector de Huella Digital para control de personal Mauro® Varios 2 05-05-2005 02:43:21
Scanner Huella Dactilar para delphi camc79 Varios 1 25-04-2004 20:36:56


La franja horaria es GMT +2. Ahora son las 12:42:57.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi