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.
Die Prüf-Engine schreibt ihre Meldungen auf Englisch. Bei den XRechnung-Regeln (BR-DE) zeigen wir die deutsche Fassung unserer Regelseiten, mit dem englischen Original der Engine darunter; die übrigen Meldungen bleiben englisch. Der Link zu jeder Regel führt zur Erklärung. Unser Support antwortet auf Englisch.
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:
- Öffnen Sie eine Kopie der PDF in einem Programm, das eingebettete Dateianhänge anzeigen kann.
-
Suchen Sie in der Anhangsliste nach der Rechnungs-XML. Sie heißt
häufig
factur-x.xml. - 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.
npm install @attestwire/en16931@0.14.0import { 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;node check-facturx.mjs rechnung.pdfDas 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.