Com funciona l'empremta de Verifactu
El que diu el document tècnic de l'AEAT, explicat per a qui l'ha de programar.
Quins camps hi entren i en quin ordre
L'empremta d'un registre d'alta es calcula sobre vuit camps de l'XML, en aquest ordre: IDEmisorFactura, NumSerieFactura, FechaExpedicionFactura, TipoFactura, CuotaTotal, ImporteTotal, Huella (la del registre anterior) i FechaHoraHusoGenRegistro.
El registre d'anul·lació en fa servir cinc: IDEmisorFacturaAnulada, NumSerieFacturaAnulada, FechaExpedicionFacturaAnulada, Huella i FechaHoraHusoGenRegistro. El registre d'esdeveniment, que només existeix en la modalitat NO VERI*FACTU, en fa servir nou, començant per les dades del sistema informàtic.
Com es construeix la cadena
Cada camp s'escriu com a nom=valor i s'uneixen amb &. Als valors se'ls treuen els espais del principi i del final. Si un camp no té valor, s'escriu només el nom i l'igual: en el primer registre del sistema l'empremta anterior va com a Huella=. La cadena es codifica en UTF-8 i s'hi aplica SHA-256; el resultat va en hexadecimal i en majúscules, 64 caràcters.
IDEmisorFactura=89890001K&NumSerieFactura=12345678/G33&FechaExpedicionFactura=01-01-2024&TipoFactura=F1&CuotaTotal=12.35&ImporteTotal=123.45&Huella=&FechaHoraHusoGenRegistro=2024-01-01T19:20:30+01:00
→ 3C464DAF61ACB827C65FDA19F352A4E3BDC2C640E9E9FC4CC058073F38F12F60
Per què s'encadena
Cada registre porta l'empremta de l'anterior, així que canviar una factura antiga trenca totes les empremtes posteriors. Per això la cadena és per sistema i instal·lació, i per això dos processos que facturen alhora han de serialitzar el càlcul: si dos registres agafen la mateixa empremta anterior, la cadena es bifurca.
En la modalitat VERI*FACTU l'AEAT recalcula l'empremta de cada registre que rep. Si no coincideix amb la teva, el registre queda «Aceptado con errores» (acceptat amb errors).
I el QR
El QR de la factura conté una URL del servei d'acarament de l'AEAT amb quatre paràmetres: nif, numserie, fecha (DD-MM-AAAA) i importe (amb punt decimal). Els valors van amb URL encoding en UTF-8: un número de sèrie com 12345678&G33 ha de viatjar com a 12345678%26G33.
La ruta canvia segons la modalitat: ValidarQR per a VERI*FACTU i ValidarQRNoVerifactu per a NO VERI*FACTU, a www2.agenciatributaria.gob.es (producció) o prewww2.aeat.es (proves). El paràmetre opcional formato=json serveix per a integracions, però no pot anar mai al QR imprès.
Ho vam comprovar el 7 d'octubre de 2026 contra el servei d'acarament de l'entorn de proves de l'AEAT: la URL que genera aquesta eina amb 12345678&G33 s'accepta i l'Agència llegeix bé el número de sèrie, i un import amb coma retorna el mateix error 2005 que et marca aquí.