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)

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.

Listening…