CII D16B EN 16931 ZUGFeRD

CII XML Validator for ZUGFeRD & XRechnung

Check the Cross-Industry Invoice XML in your ZUGFeRD or XRechnung files against EN 16931 in seconds.

Drag and drop your invoices here, or click to browse.

Why validate ZUGFeRD CII XML with us?

Find schema and business-rule errors before your XRechnung reaches a public authority or your B2B trading partner.

UN/CEFACT D16B Schema Check

Your XML is checked against the UN/CEFACT Cross-Industry Invoice D16B XSD first, so structural and data-type faults surface immediately.

Full EN 16931 Rule Set

Every Schematron business rule runs against your invoice (VAT arithmetic, mandatory fields, and VAT category logic) exactly as a German receiver applies them.

Profile and CIUS Detection

We read your specification identifier, detect the ZUGFeRD profile (MINIMUM through EXTENDED), and apply the matching rules, including the XRechnung CIUS where present.

ZUGFeRD & XRechnung Ready

CII is the structured core of both ZUGFeRD and XRechnung, so an XML that passes here is ready to embed in a compliant PDF/A-3 or send as a standalone X-invoice.

How It Works

Validate the Cross-Industry Invoice XML behind your ZUGFeRD or XRechnung in three steps.

Step 1

Drop Your CII XML or ZUGFeRD PDF

Drag and drop a standalone CII XML file, or a ZUGFeRD PDF, and we read the embedded Cross-Industry Invoice automatically.

Step 2

Schema and Rule Validation

We validate the XML against the CII D16B XSD, then run the complete EN 16931 Schematron set for the profile we detect.

Step 3

Read Your Report

Get a clear pass or fail report with the business term (BT) and rule ID for every finding, so you can correct the XML before you send it.

Frequently Asked Questions

Everything you need to know about validating the CII XML in ZUGFeRD and XRechnung invoices.

CII, short for Cross-Industry Invoice, is the UN/CEFACT XML syntax. Together with UBL it is one of the two syntaxes EN 16931 permits, and it is the structured data embedded in every ZUGFeRD file and carried by every XRechnung.
We check against the UN/CEFACT CII D16B XSD and the full EN 16931 Schematron rules, covering every ZUGFeRD profile from MINIMUM to EXTENDED and the XRechnung CIUS.
Yes. The validator is made for standalone CII XML. You can also drop a ZUGFeRD PDF and we extract and validate the embedded Cross-Industry Invoice for you.
You get a detailed report naming every rule violation, the affected business term (BT), and how to fix each one in your XML.
Basic validation is free for up to 10 invoices at a time. Premium adds stricter rule sets, XRechnung-specific checks, and batch processing.
An error is blocking: the file is non-compliant and a German receiver or public authority will reject it. A warning is advisory and does not block compliance, but flags a best-practice deviation. A file can pass with warnings, never with errors.

EN 16931 accepts two XML syntaxes, and CII is the one at the heart of German e-invoicing. Cross-Industry Invoice (CII) is the UN/CEFACT syntax at the core of ZUGFeRD and XRechnung. When you issue a ZUGFeRD invoice, it is the embedded CII XML, not the PDF page, that a public authority, your B2B partner, or a system such as DATEV actually reads. Validating that XML before you send it is the surest way to avoid a rejected X-invoice or a silently dropped ZUGFeRD file.


What this CII validator checks

A CII invoice has to clear two separate layers. This validator runs both and reports them separately, so you can see precisely where an XRechnung or ZUGFeRD payload falls short.

The CII D16B XSD schema - checks the XML against the UN/CEFACT Cross-Industry Invoice D16B schema. Structural problems surface here first: missing mandatory elements, wrong data types on monetary or quantity amounts, dates that are not valid YYYYMMDD strings, and broken namespace declarations. Nothing that fails the schema can reach the business-rule stage, so this layer always runs first.

EN 16931 Schematron: the business rules - this is where most rejected invoices originate. The rules verify VAT arithmetic (BR-CO-14: the invoice total VAT must equal the sum of the VAT category amounts), VAT category logic (BR-S-08: a standard-rate line needs a rate above zero), mandatory content (BR-01: specification identifier, BR-06: seller name), and payment data (BR-61: an IBAN is required for payment means 30 or 58). Your specification identifier declares the profile, from MINIMUM to EXTENDED, and that profile decides which rules are mandatory. The XRechnung CIUS layers further German rules on top.


CII errors we see most often

These violations come up again and again on German CII XML. If your file fails, start here.

BR-01 - Missing specification identifier
The GuidelineSpecifiedDocumentContextParameter/ID element is empty or absent. Every CII invoice must name its EN 16931 profile (for example urn:cen.eu:en16931:2017, or a ZUGFeRD URN such as urn:cen.eu:en16931:2017#conformant#urn:factur-x.eu:1p0:extended). Without it the validator cannot pick a rule set and rejects the file at once.

BR-CO-14 - VAT total does not match the breakdown
The invoice total VAT does not equal the sum of the VAT category breakdown amounts. It usually fires when rounding between line level and header level drifts by a cent. Derive the header VAT from the breakdown rather than calculating it on its own.

BR-S-08 - Standard-rate line carries a zero rate
A line is marked VAT category S (standard rate) but shows 0%. If you really mean zero, use category Z (zero-rated) or E (exempt) instead.

BR-AE-05 - Reverse-charge line has a non-zero rate
With VAT category AE (reverse charge / Steuerschuldnerschaft des Leistungsempfangers), the rate must be exactly zero: the recipient accounts for the tax.

XSD - Wrong date format
A date carries a format other than 102, or a value that is not a valid YYYYMMDD string. CII writes dates as a DateTimeString with format 102, which is stricter than the ISO style UBL uses.

XSD - Elements in the wrong order
CII is order-sensitive: child elements must appear in exactly the sequence the schema defines. An element placed before a sibling it should follow fails the XSD even when every value is correct. This trips up almost everyone hand-writing CII.


CII, ZUGFeRD and XRechnung: how they fit together

ZUGFeRD (Germany) and Factur-X (France) are not different XML formats: each wraps the same CII XML inside a PDF/A-3 container, and XRechnung can be sent as CII too. A CII file that validates here is exactly what you embed to build a compliant ZUGFeRD PDF, or send as a standalone X-invoice. Have a standalone XML? Validate it, then embed it. Already have a ZUGFeRD PDF? Drop it here and we validate the embedded CII for you.

CII is also one of the two syntaxes Peppol BIS Billing 3.0 carries, alongside UBL, and the route many German senders use on Peppol. Validating the CII first gives you a clean source before any conversion.

Ready for mandatory e-invoicing?

Make every invoice compliant, in a single message

Subscribe to get unlimited tools, choosable compliance profiles and the full set of premium features.

EN 16931 & PDF/A-3b compliant Results in seconds No installation Data never stored
3 free uses per day · No card required