Ver Mensaje Individual
  #7  
Antiguo 18-12-2024
razorxxx razorxxx is offline
Miembro
 
Registrado: jul 2015
Posts: 198
Reputación: 11
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