Germany Personalausweis Document-Number Validator

Verify the 9-character German national ID document number using the ICAO 9303 check-digit algorithm.

Ad placeholder (leaderboard)
Enjoying the tools? Go Pro for £4.99 (one-time) and remove all ads — forever, on this device. Remove ads — £4.99

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:

  1. 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).
  2. 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.
  3. Sum all eight products.
  4. Take the result modulo 10. The remainder is the required check digit.
  5. 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):

PosCharValueWeightProduct
1T297203
22236
32212
40070
50030
60010
71177
82236

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.

Ad placeholder (rectangle)