The German Personalausweis (national identity card) has been issued in its current credit-card format since 1 November 2010. Each card carries a 9-character document number on the front face and in the Machine Readable Zone (MRZ) on the reverse. This tool validates that number using the exact check-digit algorithm specified in ICAO Doc 9303 — the same international standard used for passports and travel documents worldwide.
Validation is useful whenever you need to catch transcription errors before submitting the number to a government portal, onboarding form, or AML/KYC workflow. The tool runs entirely in your browser and never transmits the number anywhere.
How it works
The Personalausweis document number is 9 characters drawn from the alphanumeric set A–Z and 0–9. The ninth character is a check digit computed from the first eight using the ICAO 9303 weighted-sum algorithm:
- Map each character to a numeric value. Digits 0–9 map to themselves (0–9). Letters A–Z map to 10–35 (A = 10, B = 11, …, Z = 35).
- Multiply by cycling weights. The weight pattern repeats as 7, 3, 1. Position 1 uses weight 7, position 2 uses weight 3, position 3 uses weight 1, position 4 uses weight 7 again, and so on through position 8.
- Sum all eight products.
- Take the result modulo 10. The remainder is the required check digit.
- Compare. The ninth character in the document number must equal that remainder.
The tool displays the full per-character breakdown table so you can follow every step of the calculation.
Worked example
Consider the test document number T22000124 (an obviously synthetic value — the letter T followed by small digits, ending in the check digit 4):
| Pos | Char | Value | Weight | Product |
|---|---|---|---|---|
| 1 | T | 29 | 7 | 203 |
| 2 | 2 | 2 | 3 | 6 |
| 3 | 2 | 2 | 1 | 2 |
| 4 | 0 | 0 | 7 | 0 |
| 5 | 0 | 0 | 3 | 0 |
| 6 | 0 | 0 | 1 | 0 |
| 7 | 1 | 1 | 7 | 7 |
| 8 | 2 | 2 | 3 | 6 |
Sum = 203 + 6 + 2 + 0 + 0 + 0 + 7 + 6 = 224
224 mod 10 = 4 — matching the ninth character, so the number is valid.
Changing any single character will almost always produce a different remainder and cause a check-digit failure, making it effective at catching single-digit transcription errors.
Formula note
The algorithm is formally described in ICAO Doc 9303 Part 3 (Machine Readable Official Travel Documents), Section 4.9. Germany’s Bundesdruckerei applies it unchanged to Personalausweis document numbers. The same algorithm (with a different payload) is also used to validate the date-of-birth field, the expiry-date field, and the personal-number field within the MRZ — each field has its own trailing check digit.
The character-value mapping — letters to 10–35 — follows directly from A being the 10th value after 0–9 and Z being 35. The weight sequence 7, 3, 1 was chosen by ICAO because it provides good single-error detection across the full alphanumeric character set while keeping the arithmetic simple enough to compute by hand if necessary.