ZUGFeRD-Rechnung online prüfen

eine PDF für Menschen, mit einer Rechnung für Maschinen darin.

Legen Sie Ihre ZUGFeRD-PDF hier ab. Der Prüfer holt die Rechnungs-XML aus der PDF und prüft sie nach den Regeln der EN 16931 und, je nach Profil, von XRechnung oder Peppol. Das geschieht in Ihrem Browser: Die Datei wird nicht hochgeladen, und Sie brauchen kein Konto.

Rechnung prüfen

ZUGFeRD- und Factur-X-PDFs, dazu XML-Dateien: XRechnung, CII und UBL.

Dieser Prüfer braucht JavaScript. Ohne JavaScript kann diese Seite Ihre Datei nicht lesen.

Ihre Datei wird lokal in Ihrem Browser verarbeitet. Sie wird nicht hochgeladen. Keine Anfrage, die Ihr Dokument enthält, verlässt die Seite. Die Regel-Engine ist als JavaScript in die Seite geladen und läuft in Ihrem Tab. Sie können das selbst nachprüfen: Öffnen Sie den Netzwerk-Tab Ihres Browsers und sehen Sie zu. Die Seite lädt eine cookiefreie Zugriffsmessung; sie zählt Seitenaufrufe und erfährt nichts über Ihre Datei.

Eine ZUGFeRD-Rechnung ist eine PDF-Datei, in der die Rechnungsdaten zusätzlich als XML-Datei stecken, also in einem Textformat, das Programme lesen können. Geprüft werden diese Daten. Eine XRechnung, also reines XML ohne PDF, prüft derselbe Prüfer, ebenso jede andere CII- oder UBL-Datei.

Die Rechnungs-XML selbst herausholen

Geprüft wird das XML, nicht der PDF-Behälter als Archivdatei. Dessen Anhang — Name, /AFRelationship und MIME-Typ — sowie die XMP-Metadaten prüft der Prüfer zusätzlich, als eigene Hinweise, nie als Fehler. Der Prüfer oben holt die Rechnungs-XML selbst aus der PDF. Wenn Sie die XML-Datei trotzdem speichern möchten, etwa um sie weiterzugeben:

  1. Öffnen Sie eine Kopie der PDF in einem Programm, das eingebettete Dateianhänge anzeigen kann.
  2. Suchen Sie in der Anhangsliste nach der Rechnungs-XML. Sie heißt häufig factur-x.xml.
  3. Speichern Sie die XML unverändert als eigene Datei.

Findet der Prüfer oben keine Rechnungs-XML, ist die Datei vermutlich eine gewöhnliche PDF ohne eingebettete Rechnung. Dann gibt es nichts zu extrahieren; bitten Sie den Absender um die E-Rechnung. Eine Texterkennung (OCR, das Auslesen von Text aus einem Bild) erzeugt keine Rechnungs-XML.

Was wird geprüft?

Attestwire liest die Rechnungsdaten und wendet die Regeln an, die es umsetzt. Sehen Sie vorher nach, welches ZUGFeRD-Profil die Rechnung hat. Ein Profil ist die Detailstufe, die eine Rechnung zu enthalten verspricht, und jedes Profil stellt andere Anforderungen. Eine Prüfung nach EN 16931, der europäischen Norm, die festlegt, was eine elektronische Rechnung enthalten muss, ersetzt deshalb nicht die Prüfung des einzelnen Profils.

Ob die Datei dem Archivformat PDF/A-3 entspricht (dem PDF-Format, in dem ein ZUGFeRD-Behälter vorliegt) und ob das sichtbare PDF und das XML dieselben Werte tragen, sagt die Prüfung weiterhin nicht. Für eine vollständige Prüfung brauchen Sie zusätzlich die Werkzeuge, die zu Ihrem Profil und Ihrem Empfänger passen.

Extraktion im eigenen Programm

Dieser Abschnitt richtet sich an Entwicklerinnen und Entwickler. Wenn Sie keinen eigenen Code schreiben, können Sie ihn überspringen und bei „Was ist ZUGFeRD?“ weiterlesen.

Die Bibliothek heißt @attestwire/en16931. Sie ist in TypeScript geschrieben und wird über npm installiert, das Paketverzeichnis für JavaScript und TypeScript. Sie stellt drei Funktionen bereit: extractFacturX holt das eingebettete XML aus der PDF, parseCiiInvoice liest die Rechnungsdaten ein, und validateInput prüft sie lokal. Keine dieser Funktionen greift auf das Netz zu.

Speichern Sie das Beispiel als check-facturx.mjs und rufen Sie es mit dem Pfad zur PDF auf. Der Build führt dieses Skript gegen die EN16931-Beispielrechnung des Herausgebers aus, bevor er es abdruckt.

Installation
npm install @attestwire/en16931@0.14.0
check-facturx.mjs
import { readFileSync } from 'node:fs';
import {
  extractFacturX, parseCiiInvoice, validateInput
} from '@attestwire/en16931';

const file = process.argv[2];
if (!file) throw new Error('Usage: node check-facturx.mjs invoice.pdf');

const extracted = extractFacturX(readFileSync(file));
const parsed = parseCiiInvoice(extracted.xml);
const result = validateInput(parsed.invoice);

console.log(JSON.stringify({
  attachmentName: extracted.attachmentName,
  extractionWarnings: extracted.warnings,
  ...result,
  unmapped: parsed.unmapped
}, null, 2));

process.exitCode = result.valid ? 0 : 1;
Aufruf
node check-facturx.mjs rechnung.pdf

Das Beispiel setzt eine PDF mit eingebetteter Rechnungs-XML voraus. Es erzeugt keine fehlende XML und bescheinigt nicht den PDF-Behälter. Extraktion oder Einlesen können fehlschlagen, bevor ein Prüfergebnis vorliegt. Behandeln Sie diese Fehler in Ihrer Anwendung getrennt und bewahren Sie die Originaldatei auf. Ein erfolgreicher Lauf belegt nicht, dass jedes Factur-X-Profil unterstützt wird.

TypeScript-Beispiel · Prüfumfang und Grenzen · Spezifikation beim Herausgeber (FNFE-MPE)

Was ist ZUGFeRD?

ZUGFeRD ist ein hybrides Rechnungsformat: eine PDF-Datei, in der zusätzlich eine XML-Datei steckt. Menschen lesen das PDF, Software liest das XML. Beide beschreiben dieselbe Rechnung.

Das XML folgt der Norm EN 16931 und ist in der Syntax CII geschrieben, einem der beiden XML-Formate, in denen eine solche Rechnung vorliegen kann. Die Engine wendet die Regeln, die sie umsetzt, auf diese CII-Daten an. Die Validierung einzelner ZUGFeRD-Profile ist davon getrennt. Welche CII-Version die Engine erzeugt und prüft, steht in den häufigen Fragen.

ZUGFeRD und Factur-X sind dieselbe Spezifikation unter zwei Namen. Die aktuelle Fassung heißt Factur-X 1.09.2 beziehungsweise ZUGFeRD 2.5.2. Auf Französisch lesen Sie dieselbe Seite unter vérifier une facture Factur-X.

ZUGFeRD, XRechnung und Factur-X im Vergleich

Vier Begriffe kommen in der Tabelle vor. XRechnung ist die deutsche Fassung der Norm, die deutsche Behörden verlangen. UBL und CII sind die beiden XML-Formate, in denen eine Rechnung nach EN 16931 geschrieben sein kann. Eine CIUS ist eine nationale Erweiterung der Norm, die optionale Felder verpflichtend macht. KoSIT ist die deutsche Stelle, die den amtlichen XRechnung-Prüfer veröffentlicht.

Format Was es ist Wer es herausgibt Typischer Einsatz
ZUGFeRD PDF/A-3 mit eingebettetem CII-XML FeRD, Deutschland B2B, oft als Anhang per E-Mail
XRechnung reines XML, UBL oder CII, als CIUS der EN 16931 KoSIT, Deutschland Rechnungen an deutsche Behörden
Factur-X dieselbe Spezifikation wie ZUGFeRD FNFE-MPE, Frankreich B2B in Frankreich

XRechnung legt den Inhalt fest, ZUGFeRD ist die Verpackung. Beides zusammen ist möglich, denn ZUGFeRD kennt ein Profil namens XRECHNUNG.

Was die Prüfung abdeckt

Geprüft wird gegen das Regelwerk der EN 16931, also gegen die Prüfregeln, die die Norm für eine Rechnung vorgibt, dazu gegen XRechnung, die deutsche Fassung der Norm mit ihren zusätzlichen Prüfregeln (sie heißen BR-DE), und gegen Peppol BIS Billing 3.0, das Regelwerk des Peppol-Netzwerks, über das viele europäische Käufer Rechnungen empfangen.

Umgesetzt sind aktuell 321 Regeln, gegen die eine von Ihnen versandte Rechnung verstoßen kann: 294 aus diesen drei Regelwerken und 27 eigene Eingabeprüfungen von Attestwire. Alle Regeln im Einzelnen

KoSIT, der Validator der deutschen Verwaltung, nimmt alle 11 Beispielrechnungen an, die diese Bibliothek erzeugt. Eine davon löst eine Warnung einer europäischen Regel aus, die KoSIT selbst als fehlerhaft gekennzeichnet und ersetzt hat; die Ersatzregel besteht sie. Keine löst einen Fehler aus. Das vollständige Protokoll

Validator 1.6.3, XRechnung-Konfiguration 3.0.2 (Stand 31. August 2026), CEN-CII-Schematron 1.3.16, XRechnung-CII-Schematron 2.6.0; aufgezeichnet am mit Engine 0.10.0. Die Warnung ist CII-SR-475 auf der erweiterten CII-Testrechnung, eine Regel, die Anhänge falsch zählt, sobald eine Rechnung mehr als einen hat (CEN-Issue 508). Die KoSIT-Konfiguration stuft sie auf „Information“ herab und prüft stattdessen BR-TMP-4, das bestanden wird.

valid: true heißt: Die Daten des Dokuments haben jede Regel bestanden, die Attestwire umsetzt. Es ist keine Zusage, dass ein Empfänger, ein Zugangspunkt (Access Point, der Anschluss an das Peppol-Netzwerk) oder eine nationale Erweiterung das Dokument annimmt. Die genauen Grenzen

Was wir nicht tun

Die Bibliothek erzeugt keine ZUGFeRD-PDF. Sie schreibt das CII-XML. Den PDF/A-3-Behälter (eingebettete Schriften, Farbprofil, XMP-Metadaten, der richtige /AFRelationship-Wert) muss eine PDF/A-3-Bibliothek erstellen. Unsere datierte Übersicht nennt Mustangproject, eine Bibliothek, die das kann. Die gehostete API erstellt den Behälter selbst, in jedem Tarif: POST /v1/generate?format=pdf liefert eine Factur-X- / ZUGFeRD-PDF (Profil EN 16931) — im kostenlosen Tarif mit Wasserzeichen als Vorschau, in den Tarifen Solo, Starter und Scale ohne.

Den Behälter liest die Bibliothek. extractFacturX(bytes) öffnet eine ZUGFeRD- oder Factur-X-PDF und gibt den XML-Anhang zurück. Die Funktion steckt im MIT-lizenzierten Paket und greift nicht auf das Netz zu. Die gehostete API liest eine solche PDF ebenso, als application/pdf gesendet.

Der Prüfer liest die PDF, bescheinigt sie aber nicht. Er holt die Rechnungs-XML heraus und prüft deren Daten. Ob der Behälter dem Archivformat PDF/A-3 entspricht, prüft er nicht.

Auf Anfrage versenden wir eine Rechnung per E-Mail an einen Empfänger — im deutschen B2B-Geschäft ein zulässiger Übertragungsweg. Darüber hinaus ist Attestwire weder ein Zugangspunkt (Access Point) noch eine zugelassene Plattform.

Häufige Fragen

Ist ZUGFeRD Pflicht?

Vorgeschrieben ist die strukturierte E-Rechnung nach EN 16931, der europäischen Norm für den Inhalt elektronischer Rechnungen. ZUGFeRD erfüllt diese Norm ab dem Profil EN 16931. Sie dürfen ZUGFeRD also verwenden, müssen es aber nicht. In Deutschland ist der Empfang inländischer B2B-E-Rechnungen seit Januar 2025 Pflicht.

Das Ausstellen beginnt am 1. Januar 2027 für Unternehmen über 800.000 € Vorjahresumsatz und am 1. Januar 2028 für alle übrigen. Welches der zulässigen Formate Sie wählen, bleibt Ihnen überlassen.

Was ist der Unterschied zwischen ZUGFeRD und XRechnung?

ZUGFeRD ist hybrid: ein PDF mit eingebettetem XML. XRechnung ist reines XML ohne PDF. Inhaltlich sind beide an EN 16931 gebunden, XRechnung zusätzlich an die deutsche Erweiterung der Norm (die sogenannte CIUS) mit ihren BR-DE-Regeln. ZUGFeRD kennt dafür ein eigenes Profil namens XRECHNUNG, das diese Erweiterung in den PDF-Behälter legt. Für Rechnungen an deutsche Behörden ist XRechnung der gefragte Standard.

Welche CII-Version prüft die Engine?

Die aktuelle ZUGFeRD-Fassung baut auf der CII-Syntaxversion D22B auf und ist als abwärtskompatibel zu D16B dokumentiert. D16B ist die Version, die diese Engine erzeugt und prüft. Die Engine wendet die Regeln, die sie umsetzt, auf die CII-Daten an. Die Validierung einzelner ZUGFeRD-Profile ist davon getrennt.

Wie öffne ich das XML in einer ZUGFeRD-PDF?

Sie müssen es nicht selbst öffnen: Legen Sie die PDF oben auf dieser Seite im Prüfer ab. Er holt den XML-Anhang in Ihrem Browser heraus und prüft ihn. Wie Sie das XML selbst speichern, zeigt der Abschnitt „Die Rechnungs-XML selbst herausholen“. Für den eigenen Code liest extractFacturX(bytes) aus @attestwire/en16931 den Anhang aus den PDF-Bytes. Das Beispiel steht im Abschnitt „Extraktion im eigenen Programm“.

Ist die Prüfung kostenlos?

Ja. Sie brauchen dafür weder ein Konto noch einen API-Schlüssel, und die Zahl der Prüfungen ist nicht begrenzt. Bezahlen müssen Sie nichts: Die Regel-Engine läuft in Ihrem Browser, uns kostet Ihre Prüfung also nichts. Dieselbe Engine gibt es als MIT-lizenziertes npm-Paket für Ihren eigenen Code.

Nächste Schritte

Rechnung jetzt prüfen

Für Ihren eigenen Code: @attestwire/en16931 auf npm · Für Frankreich: was wir dort abdecken · Auf Französisch: vérifier une facture Factur-X