Field Notes · MRZ Parsing

Belgian eID Card MRZ: TD1 Format and 12-Digit Document Number

The Belgian eID document number is 12 digits long. The TD1 MRZ only reserves 9 characters for it. This is where the rest is stored, why it's a country-specific extension rather than a broken document, and why it still catches TD1 MRZ parsers off guard.

September 2026 · MRZ format reference · ICAO 9303 TD1

At first glance, a Belgian eID looks like a fairly standard TD1 identity card.

Then you try to parse its document number.

The Belgian ID card number contains 12 digits. But the standard TD1 MRZ allocates only nine character positions for the document number before its check digit.

So where do the remaining digits go?

They don't disappear. They continue into the MRZ's optional data area.

This small detail is a good example of why reliable document OCR is more than simply reading characters from an image.

A document parser cannot reliably understand an ID card by applying one universal MRZ template. It needs to understand the document type and, sometimes, the issuing country's implementation.

Diagram of the Belgian eID TD1 MRZ line, showing the 9-digit document number field, the extension marker, the 3 continuation digits, and the hash check digit
How a 12-digit Belgian document number is encoded across the standard document-number field and the MRZ's optional data field. Synthetic example for illustration — not a real document or person.

Belgian eID at a Glance

Document typeNational identity card (Belgian eID / Belgian ID card), ID-1 size
MRZ formatTD1 (ICAO Doc 9303)
MRZ structure3 lines × 30 characters, line 1 starts with IDBEL
Issuing country codeBEL
Document (card) number12 digits — longer than the standard 9-character TD1 field
National Register numberSeparate identifier, 11 digits, held for life
ChipContact chip since 2005 (certificates, address; fingerprints since 2020)
Country-specific MRZ handling requiredYes — document-number extension

A Brief History of the Belgian eID

Belgium introduced its electronic identity card under the BELPIC program, with a pilot phase starting in March 2003 in eleven municipalities. The national rollout began in September 2004, and by the end of 2009 the transition from the old paper-based Belgian identity card to the Belgian eID was essentially complete.

The card has since gone through design and security updates. A new generation was introduced on 16 November 2021, bringing the Belgian ID card in line with EU Regulation 2019/1157 — a polycarbonate body, laser engraving and additional optical security features. Both generations remain in circulation, since each card stays valid until its own expiry date, which is why a Belgian ID OCR pipeline needs to handle either design.

Is the Belgian eID a TD1 Document?

Yes. The Belgian eID is an ID-1/TD1-sized identity document with a three-line MRZ. TD1 documents use three MRZ lines of 30 characters each, and ICAO Doc 9303 defines the general structure — but individual countries can use the available fields in different ways.

TD1 defines the structure. It does not mean every TD1 document behaves identically.

That gap between "same format" and "same behavior" is where Belgian eID MRZ parsing gets interesting — and where a generic TD1 MRZ parser can quietly produce the wrong answer.

How the 12-Digit Document Number Fits Into the MRZ

In the standard TD1 layout, the document number sits in the first MRZ line, in a fixed 9-character field, followed immediately by a check digit. A parser that assumes every TD1 document follows the simplest nine-character pattern can therefore extract an incomplete document number.

ICAO 9303 anticipates this. When a national document number is longer than 9 characters, the standard defines an extension mechanism: the check-digit position for the 9-character field is replaced with a filler (<), the remaining digits continue into the optional data field that follows, and a new check digit — this one covering the complete number — is placed right after the continuation.

The Belgian eID uses exactly this country-specific extension within the TD1 MRZ structure. It isn't a broken or non-standard document; it's ICAO's own long-document-number handling, applied by Belgium:

IDBEL482910733<0458<<<<<<<<<<<
  • Positions 1–5 — document type + issuing country (IDBEL)
  • Positions 6–14 — first 9 digits of the document number
  • Position 15 — filler (<), not a check digit: signals the number continues
  • Positions 16–18 — the remaining 3 digits of the document number
  • Position 19 — check digit for the complete 12-digit number
  • Positions 20–30 — filler padding
Synthetic MRZ line for illustration — not a real document or person.

The complete Belgian document number — 482910733045 in this synthetic example — is therefore reconstructed from two separate MRZ fields, not read off as one contiguous string.

Belgian eID specimen card with the 12-digit document number field highlighted on the MRZ
A Belgian eID specimen card. Test/specimen document, not a real person — the document-number field is highlighted for reference.

Why Belgian ID Cards Can Break a Standard TD1 MRZ Parser

If position 15 of a TD1 MRZ contains < instead of a digit, don't treat it as an invalid or missing document-number check digit. On a Belgian eID card with a long document number, this means the number continues in the optional data field that follows — and the digit immediately after that continuation, not position 15, is the one that validates the complete number.

Most TD1 MRZ parsers are written against the simple case: nine-character document number, one check digit, done. Point them at a long Belgian document number and one of two things typically happens — the parser flags a checksum failure on a perfectly valid card, or it reads only the first 9 digits and silently returns a truncated document number that still looks plausible.

This isn't merely a theoretical edge case. The same Belgian ID format has caused parsing problems in real, open-source MRZ libraries. In a documented, still-open GitHub issue on the mrz library (Arg0s1080/mrz, issue #4), a developer reported that the parser failed to verify Belgian ID cards specifically because of the check digit at that position — testing three different Belgian ID cards and finding the same behavior on all three. The fix, as the reporter describes it, is exactly the continuation logic above: when the document-number check digit reads as <, the real check digit has to be read from later in the optional data field, not treated as missing.

That's a good storytelling shortcut for the underlying lesson: a real parser, written by someone who clearly understood MRZ well enough to build a library around it, still had to special-case Belgian ID cards after the fact — because TD1 compliance alone didn't cover it.

How the Belgian eID Check Digit(s) Work

This is worth being precise about, because there are two separate checksums involved in a Belgian ID card number, not one:

1. The check digit built into the printed card number itself. The visible Belgian card number follows the format xxx-xxxxxxx-yy, where yy is a check digit equal to the remainder of the first 10 digits divided by 97 (if that remainder is 0, the check digit is set to 97). This is a Belgian administrative rule, unrelated to ICAO or the MRZ.

2. The check digit added by the MRZ itself. Per ICAO 9303, MRZ check digits use a mod-10 algorithm: each character gets a numeric value (digits as themselves, A–Z as 10–35, < as 0), weighted 7-3-1 repeating, summed, and taken mod 10. For the synthetic example above, 482910733045 weighted 7-3-1 sums to 198, and 198 mod 10 = 8 — matching the check digit shown in the diagram.

In other words, the same 12-digit Belgian document number is protected by two independently computed checksums, stored in two different places: one on the face of the card, one only inside the MRZ. A Belgian ID OCR pipeline that validates against just one of them is only half-checking the number.

Don't Confuse the Card Number With the National Register Number

A Belgian eID carries more than one important identifier, and they shouldn't be treated as interchangeable fields in an OCR or identity-verification workflow:

A person keeps the same National Register number across every card they're ever issued. The card number is different on every card. Extracting the wrong one — or conflating them — breaks downstream KYC, onboarding or record-matching logic that assumes a document number identifies a person rather than a piece of plastic.

Why Belgian eID Is a Good Test Case for ID OCR

Belgian eID is a useful example of a broader problem in identity document processing. A generic OCR engine can recognize the characters in an MRZ. That doesn't necessarily mean it understands the document.

A production document parser has to answer additional questions:

How Misfora Handles Belgian eID and Other TD1 Edge Cases

Misfora's document OCR pipeline doesn't treat every ID card as a generic image. It first identifies the document type and MRZ format, then applies document-specific parsing and validation rules to extract structured fields.

For Belgian eID cards, this includes handling the TD1 extension for the 12-digit document number and cross-checking the MRZ-derived value against the printed card number — rather than reading only the first nine MRZ characters and stopping there.

This matters when document data feeds directly into a PMS, CRM, KYC workflow or onboarding system, where a silently truncated document number is worse than a rejected scan.

TD1 Is a Format, Not a Universal Parsing Template

Belgian eID is only one example. Other TD1 documents can use the same MRZ structure while introducing different field conventions, optional-data usage and document-number rules of their own — a long TD1 document number turns out to be its own small parsing category, not a Belgium-only quirk.

It's a documented category, too: the same open-source mrz library has a second, separate open issue (#35) reporting that Estonian ID cards also set the document-number checksum position to < — a different country, a related but distinct non-standard behavior, reported independently by a different developer.

We are documenting these country-specific cases as we encounter them.

Italian ID card specimen with its document number field highlighted, shown for comparison with the Belgian eID format
A different TD1 identity card, shown for comparison — Italy's document-number field follows its own convention rather than Belgium's. Specimen/facsimile document, not a real person.

For the current list of countries and document types Misfora has been tested against, see the supported documents page.

Is the Belgian eID a TD1 document?

Yes. The Belgian eID is an ID-1-sized identity card with a three-line, 30-character-per-line MRZ, following the ICAO 9303 TD1 format — the same MRZ family used by many national ID cards.

How many digits is the Belgian eID document number?

12 digits. That's longer than the 9-character document-number field defined in the standard TD1 layout, so the Belgian eID uses ICAO 9303's built-in extension mechanism to store the remaining 3 digits in the MRZ's optional data field.

Why does my TD1 parser fail on Belgian ID cards?

Most likely because it assumes every TD1 document number is exactly 9 characters with a check digit in position 15. On Belgian eID cards, position 15 is a filler ("<") instead, signaling that the document number continues into the optional data field. A parser that treats that "<" as invalid, rather than following the continuation, will reject a valid card or silently truncate the document number.

Where is the MRZ on a Belgian eID card?

On the back of the card: three lines of 30 characters each, with line 1 starting with the characters IDBEL.

Can a Belgian eID be scanned with OCR?

Yes, but correctly reconstructing the full 12-digit document number requires document-specific MRZ parsing rather than reading only the standard 9-character document-number field.

What is the difference between the Belgian card number and the National Register number?

The card (document) number is 12 digits and identifies the physical card — it changes every time the card is renewed. The National Register number is 11 digits, encodes the holder's birth date, and is assigned once, usually at birth, staying the same across every card that person is ever issued.

Need Belgian ID OCR for your software?

If you're building a hotel PMS, car rental system, travel platform or another application that needs identity-document data, the Misfora OCR API returns structured fields with a pass/fail validation check on every field — including the Belgian eID's extended document number. Explore the OCR API →

Try the recognition engine yourself

Scan a Belgian eID or another TD1 document in your browser — no account, nothing stored — with the same engine behind this article. Try the free scanner →