Kostenloses Tool für Entwickler

Verifactu Hash-Rechner (huella) und QR-Code

Berechnen Sie den SHA-256-Hash (huella) eines Rechnungs-, Storno- oder Ereignisdatensatzes genau so, wie ihn die spanische Steuerbehörde AEAT definiert, verketten Sie ihn mit dem nächsten Datensatz und erzeugen Sie URL und QR-Code der Rechnung samt Validierung. Laden Sie die offiziellen Beispiele und prüfen Sie, ob Ihr Code dasselbe Ergebnis liefert.

  • Reproduziert die 3 offiziellen Beispiele
  • Berechnung in Ihrem Browser
  • Ohne Anmeldung

Testwerkzeug auf Grundlage der von der AEAT veröffentlichten technischen Dokumente (Hash v0.1.2 und QR v0.5.0). Es übermittelt nichts an die Agencia Tributaria und ersetzt nicht deren Validierungen.

Hash des Rechnungsdatensatzes

Wählen Sie den Datensatztyp, füllen Sie die Felder so aus, wie sie in Ihrem XML stehen, und berechnen Sie. Lassen Sie den vorherigen Hash leer, wenn es der erste Datensatz des Systems ist.

Datensatztyp
Offizielle Beispiele der AEAT:

Genau wie auf der Rechnung, bis zu 60 Zeichen.

Format TT-MM-JJJJ, mit Bindestrichen.

Mit Dezimalpunkt. 123.1 und 123.10 gelten für die AEAT als gleich, aber der Hash wird über das berechnet, was Sie eingeben.

64 Hexadezimalzeichen in Großbuchstaben. Bleibt leer (Feld „Huella=“), wenn es der erste Datensatz ist.

ISO 8601 mit Sekunden und Zeitzone.

Alles wird in Ihrem Browser mit der Web Crypto API berechnet. Wir speichern und übertragen Ihre Eingaben nicht.

URL und QR-Code der Rechnung

Erzeugen Sie die Prüf-URL mit der richtigen Kodierung, validieren Sie sie nach den Regeln der AEAT und laden Sie den druckfertigen QR-Code herunter.

Variante des Systems
Umgebung

Bis zu 60 druckbare ASCII-Zeichen. „&“, „/“ oder Leerzeichen werden automatisch kodiert.

Dezimalpunkt, bis zu 12 Vorkomma- und 2 Nachkommastellen.

Eine vorhandene QR-URL validieren

Fügen Sie die URL ein, die Ihr Programm druckt (oder die ein QR-Scanner ausliest), und wir sagen Ihnen, ob die AEAT sie akzeptiert.

So funktioniert der Verifactu-Hash

Was im technischen Dokument der AEAT steht, erklärt für die, die es programmieren müssen.

Welche Felder einfließen und in welcher Reihenfolge

Der Hash eines Rechnungsdatensatzes (registro de alta) wird über acht Felder des XML berechnet, in dieser Reihenfolge: IDEmisorFactura, NumSerieFactura, FechaExpedicionFactura, TipoFactura, CuotaTotal, ImporteTotal, Huella (der Hash des vorherigen Datensatzes) und FechaHoraHusoGenRegistro.

Der Stornodatensatz (registro de anulación) verwendet fünf: IDEmisorFacturaAnulada, NumSerieFacturaAnulada, FechaExpedicionFacturaAnulada, Huella und FechaHoraHusoGenRegistro. Der Ereignisdatensatz, den es nur in der Variante NO VERI*FACTU gibt, verwendet neun, beginnend mit den Daten des Rechnungssystems.

Wie die Zeichenkette aufgebaut wird

Jedes Feld wird als name=wert geschrieben, die Felder werden mit & verbunden. Führende und abschließende Leerzeichen werden aus den Werten entfernt. Hat ein Feld keinen Wert, stehen nur Name und Gleichheitszeichen: Beim ersten Datensatz des Systems steht der vorherige Hash als Huella=. Die Zeichenkette wird in UTF-8 kodiert und mit SHA-256 gehasht; das Ergebnis ist hexadezimal, in Großbuchstaben und 64 Zeichen lang.

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

Warum verkettet wird

Jeder Datensatz enthält den Hash des vorherigen, deshalb bricht die Änderung einer alten Rechnung alle nachfolgenden Hashes. Darum gilt die Kette pro System und Installation, und darum müssen zwei Prozesse, die gleichzeitig fakturieren, die Berechnung serialisieren: Greifen zwei Datensätze auf denselben vorherigen Hash zu, verzweigt sich die Kette.

In der Variante VERI*FACTU berechnet die AEAT den Hash jedes empfangenen Datensatzes nach. Stimmt er nicht mit Ihrem überein, erhält der Datensatz den Status „Aceptado con errores“ (angenommen mit Fehlern).

Und der QR-Code

Der QR-Code der Rechnung enthält eine URL des Prüfdienstes der AEAT mit vier Parametern: nif, numserie, fecha (TT-MM-JJJJ) und importe (mit Dezimalpunkt). Die Werte werden URL-kodiert in UTF-8 übergeben: Eine Seriennummer wie 12345678&G33 muss als 12345678%26G33 übertragen werden.

Der Pfad hängt von der Variante ab: ValidarQR für VERI*FACTU und ValidarQRNoVerifactu für NO VERI*FACTU, auf www2.agenciatributaria.gob.es (Produktion) oder prewww2.aeat.es (Test). Der optionale Parameter formato=json dient Integrationen, darf aber nie im gedruckten QR-Code stehen.

Wir haben es am 7. Oktober 2026 gegen den Prüfdienst der Testumgebung der AEAT getestet: Die URL, die dieses Tool mit 12345678&G33 erzeugt, wird akzeptiert und die Behörde liest die Seriennummer korrekt, und ein Betrag mit Komma liefert denselben Fehler 2005, den Ihnen das Tool hier anzeigt.

Die häufigsten Fehler bei der Implementierung

Und die Ihnen dieser Rechner hilft zu finden, bevor es die AEAT tut.

  1. Hash in Kleinbuchstaben

    Die meisten Bibliotheken liefern Hexadezimal in Kleinbuchstaben. Die AEAT will Großbuchstaben.

  2. Ausstellungsdatum im ISO-Format

    Im Hash und im QR-Code steht das Ausstellungsdatum als TT-MM-JJJJ, nicht als JJJJ-MM-TT. Datum und Uhrzeit des Datensatzes stehen dagegen sehr wohl in ISO 8601 mit Zeitzone.

  3. Datum und Uhrzeit ohne Zeitzone

    2024-01-01T19:20:30 reicht nicht: Die Zeitzone muss dabei sein, +01:00 oder +02:00 je nach Jahreszeit, auf den Kanaren +00:00 oder +01:00.

  4. Dezimalkomma in Beträgen

    Weder im Hash noch im QR-Code: immer ein Punkt. Im QR-Code liefert ein Komma den Fehler 2005.

  5. „Huella=“ im ersten Datensatz vergessen

    Das Feld steht auch, wenn es leer ist. Fehlt es in der Zeichenkette, ändert sich der Hash des ersten Datensatzes und damit der der ganzen Kette.

  6. Nicht kodiertes „&“ in der Seriennummer

    Es teilt die QR-URL in zwei Parameter, und der Prüfdienst findet die Rechnung nicht. Kodieren Sie die Werte immer.

  7. Zwei Prozesse mit demselben vorherigen Hash

    Fakturieren zwei Kassen oder zwei Worker gleichzeitig ohne Sperre, verzweigt sich die Kette. Serialisieren Sie die Berechnung pro System und Installation.

  8. Neuberechnung über „normalisierte“ Daten

    Der Hash wird über den Wert berechnet, der im XML steht. Steht in Ihrem XML 123.10 und wird der Hash mit 123.1 berechnet, stimmen sie nicht überein.

Was dieser Rechner nicht tut

Er berechnet den Hash und die QR-URL, damit Sie Ihre Implementierung testen können. Er erzeugt nicht das vollständige XML des Datensatzes, signiert es nicht (XAdES) und übermittelt es nicht an die AEAT, und genau das macht aus einem Programm ein Verifactu-System: Sendewarteschlange, Flusskontrolle, Wiederholungen, Korrekturrechnungen und Konformitätserklärung (declaración responsable).

Das machen wir bei Kiwop: Wir passen Ihre eigene Software, Ihr ERP oder Ihren Onlineshop an Verifactu an oder entwickeln Ihre Rechnungsstellung neu, und liefern Ihnen die Konformitätserklärung.

Zum Verifactu-Service

Häufige Fragen

Häufige Fragen

Zum Hash, zum QR-Code und zum Rechner.

Welchen Algorithmus verwendet der Verifactu-Hash?

SHA-256, den einzigen, den die AEAT derzeit zulässt (Liste L12 im Anhang der Orden HAC/1177/2024). Das Ergebnis wird hexadezimal in Großbuchstaben mit 64 Zeichen angegeben.

Wie wird der Hash des ersten Datensatzes berechnet?

Wie bei allen anderen, aber mit leerem Feld für den vorherigen Hash: Die Zeichenkette enthält Huella= ohne etwas dahinter. Außerdem markiert der Datensatz PrimerRegistro mit „S“ und enthält keinen Block zum vorherigen Datensatz. Fall 1 der offiziellen Beispiele ist genau das.

Ergeben die Beträge 123.1 und 123.10 denselben Hash?

Nein: Der Hash ist ein SHA-256 der Zeichenkette, jedes geänderte Zeichen ändert ihn. Die AEAT akzeptiert beide Formate (eine oder zwei Nachkommastellen) als gültig; entscheidend ist, dass der Hash mit demselben Wert berechnet wird, der in Ihrem XML steht.

Sendet der Rechner meine Daten irgendwohin?

Nein. Der Hash wird in Ihrem Browser mit der Web Crypto API berechnet, und auch der QR-Code wird lokal gezeichnet. Hinter dem Tool steht kein Server, und wir speichern nicht, was Sie eingeben.

Wie groß muss der Verifactu-QR-Code sein?

Zwischen 30×30 und 40×40 mm, nach der Norm ISO/IEC 18004 und mit Fehlerkorrekturstufe M. Er braucht mindestens 2 mm weißen Rand (empfohlen sind 6), steht am Anfang der Rechnung auf der ersten Seite und trägt darüber den Vermerk „QR tributario:“. Das SVG, das der Rechner herunterlädt, misst 35 mm.

Was bedeutet „Aceptado con errores“?

Das ist der Status (angenommen mit Fehlern), den die AEAT einem VERI*FACTU-Datensatz gibt, den sie empfangen hat, in dem sie aber einen Fehler gefunden hat, etwa einen Hash, der nicht mit ihrer Berechnung übereinstimmt. Der Datensatz existiert, aber Sie müssen ihn mit einer Berichtigung (subsanación) korrigieren. Deshalb lohnt es sich, den Hash vor dem Produktivbetrieb zu testen.

Kann ich die Test-URL auf echten Rechnungen verwenden?

Nein. prewww2.aeat.es ist die externe Testumgebung und funktioniert nur mit Datensätzen, die an diese Umgebung gesendet wurden. Echte Rechnungen tragen die Produktions-URL, www2.agenciatributaria.gob.es.

Quellen

Quellen

Offizielle technische Dokumente der AEAT, auf denen das Tool beruht, gelesen am 7. Oktober 2026.

  1. Detalle de las especificaciones técnicas para generación de la huella o hash (v0.1.2) Felder, Reihenfolge, Format und die drei Beispiele, die der Rechner reproduziert.
  2. Detalle de las especificaciones técnicas del código QR (v0.5.0) URL, Parameter, Kodierung, Größe und Fehlercodes 1001 bis 3002.
  3. Orden HAC/1177/2024, technische Spezifikationen Artikel 13 (Hash), 20 und 21 (grafische Darstellung und QR-Code).
  4. Technische Informationen zu Verifactu im Portal der AEAT Schemas, WSDL, Validierungen und Testumgebung.
  5. QR Code generator library, von Project Nayuki MIT-Lizenz. Erzeugt den QR-Code in Ihrem Browser.

Nächster Schritt

Ihr Hash stimmt? Das Schwierige kommt danach

Übermittlung, Wiederholungen, Korrekturrechnungen, Nebenläufigkeit und Konformitätserklärung. Wir bringen es in Ihrem System zum Laufen.

  • Unverbindlich
  • Antwort in 24h
  • Individuelles Angebot