Germany Postcode Validator

Instantly validate any German PLZ and identify its federal state and region.

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

Germany’s 5-digit Postleitzahl (PLZ) is one of the cleanest postal-code formats in the world — no letters, no spaces, exactly five decimal digits — yet it trips up developers and data-entry staff in one subtle but costly way: codes in the range 01001–09999 carry a leading zero. The moment a PLZ is cast to an integer (or stored in a numeric database column), that zero disappears and the code becomes invalid. This validator enforces the correct string representation, checks every digit, and maps the code to its official Deutsche Post sorting district so you know both whether the format is right and where in Germany the code belongs.

How it works

German postcode validation follows a three-step logic:

Step 1 — Character check. A PLZ must consist of exactly 5 decimal digits (0–9). Letters, spaces, hyphens and other punctuation are all illegal. This single rule rejects the majority of garbage input immediately.

Step 2 — Length check. The length must be precisely 5. A 4-digit input almost certainly has a stripped leading zero; a 6-digit input is not a PLZ at all. Both are flagged with an explicit message explaining what went wrong.

Step 3 — Leitregion lookup. Deutsche Post divides Germany into roughly 83 Leitregionen (sorting regions), each identified by the first two digits of its PLZ range. The validator matches the first two digits of your input against the complete official table and reports the Bundesland (federal state) and the named postal region (for example, “80” maps to Bavaria / Munich central, “10” maps to Berlin inner west). If the two-digit prefix does not appear in the table, the input is flagged as unrecognised — it may be a real code in a sub-range not covered by the table, or it may be a typo.

The first digit alone provides a rough compass bearing: 0 = eastern states, 1 = Berlin/Brandenburg, 2–3 = north, 4–5 = North Rhine-Westphalia, 6 = Hesse and Rhine, 7 = Baden-Württemberg, 8 = Bavaria south, 9 = Bavaria north.

Worked example

Suppose a user submits the postcode 80331:

  • Length: 5 digits — correct.
  • All characters are digits — correct.
  • First digit “8” — Bavaria, Munich region.
  • Leitregion “80” — Bavaria, Munich central (sorted at the Munich distribution centre).
  • Result: valid. The code belongs to Munich’s historic Altstadt-Lehel district, one of the most recognisable postcodes in Germany.

Now suppose the input is 1115 (four digits):

  • Length: 4 — too short.
  • Likely cause: a leading zero was stripped, turning 01115 (a Berlin code) into 1115.
  • Fix: store and transmit PLZs as strings, not integers.
PLZStateRegionNotes
10115BerlinBerlin inner westMitte, government quarter
20095HamburgHamburg centralCity centre
80331BavariaMunich centralAltstadt
01001SaxonyDresdenLeading zero — must stay as string
50667NRWCologneCathedral district
60311HesseFrankfurt am MainCity centre

All validation runs in your browser. No postcode is ever uploaded or logged.

Ad placeholder (rectangle)