Canadian · Validation

Passport MRZ validator.

Paste the two machine-readable lines from the photo page of a passport (TD3 format) and check every ICAO 9303 check digit: document number, date of birth, date of expiry, and the composite. Everything runs in your browser.

Source: ICAO Doc 9303, Part 4 (TD3)

Advertisement

Inputs

Use < for filler characters, exactly as printed. This is the ICAO specimen MRZ — try “Generate sample” to load it.

Result

Paste both MRZ lines and press Validate.

How the MRZ check digits work

Each MRZ check digit is computed over a field's characters using weights 7, 3, 1 repeating from the first character, where digits count as themselves, letters A–Z count as 10–35, and the filler character < counts as 0. The weighted values are summed and taken modulo 10. A TD3 (passport-size) machine-readable zone carries five such check digits on line 2: one each for the document number, date of birth, and date of expiry, one for the optional personal-number field, and a composite check digit computed over document number + its check digit, date of birth + its check digit, date of expiry + its check digit, and personal number + its check digit concatenated together (39 characters) — nationality and sex are not part of any check digit.

This is defined in ICAO Document 9303, Part 4, the international standard every machine-readable passport follows, including Canadian passports. The worked example above is ICAO's own published specimen from that standard.

What a passing checksum does and doesn’t tell you

A valid check digit only proves the printed characters are internally consistent — it does not confirm the document is genuine, unexpired, or unrevoked. Passport authenticity can only be confirmed by the issuing government or a border authority reading the document's embedded chip and security features. This tool runs entirely in your browser: nothing you type is transmitted, stored, or logged.

Worked example: the ICAO specimen

Check digits from the ICAO Doc 9303 specimen
FieldCharactersWeighted sumMod 10
Document numberL898902C3147+24+9+56+27+0+14+36+3 = 3166
Date of birth74081249+12+0+56+3+2 = 1222
Date of expiry1204157+6+0+28+3+5 = 499

Letters count as 10 to 35, so L is 21 and C is 12. Weights run 7, 3, 1 repeating. The specimen line 2 carries check digits 6, 2 and 9 after those fields, which the tool reproduces.

Sources and as-of date

The method is defined in ICAO Doc 9303. That URL returned HTTP 404 to an automated request on 26 October 2026, so the specimen values above were verified by recomputing them rather than by re-reading the standard. Verified 26 October 2026.

Frequently asked questions

What are the weights?

7, 3 and 1, repeating from the first character.

How is the filler character counted?

The < filler counts as 0.

Does a pass prove the passport is genuine?

No. Only the chip and security features can confirm that.

Is the passport data stored?

No. It stays in your browser.

Advertisement
Advertisement