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
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);
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