Key takeaways
- Put the street name before the house number
- Place the five-digit PLZ before the city
- Do not prefix a postcode with D-
- Preserve Unicode characters such as ä, ö, ü, and ß
Authorship and review
Read our editorial and review principles- Written by
- Random Address Generator Editorial Team
- Reviewed by
- International Address Format Review Team
- Latest substantive update
- Reviewed street, house number, PLZ, city, and international country-line rules against Deutsche Post guidance.
Basic German domestic order
German domestic mail normally uses recipient, street plus house number, then five-digit postcode and city. The street-number order differs from common English rendering, so an international form should not parse every address line with one English pattern.
Deutsche Post calls for left-aligned, evenly spaced lines. Printed-label tests should therefore check layout and truncation as well as data values.
Field mapping and localized rendering
A database may store streetName and houseNumber separately, but German output must combine them in local order. House numbers can contain letters, hyphens, or ranges and should not be integers.
| Field | Example | Common failure |
|---|---|---|
| Street | Schillerstraße | Stripping ß or forcing an abbreviation |
| House number | 18a | Allowing digits only |
| Postal code | 80331 | Adding a D- prefix |
| City | München | Silently changing it to Munchen |
| Country | DE | Concatenating the country code with PLZ |
The country line for mail sent to Germany
International mail adds the full country name below the city line, commonly in uppercase German, English, or French. Do not prefix the postcode with D- or DE-; those older prefixes can interfere with sorting.
Your system can still store countryCode as DE. The print renderer converts the code to the appropriate country name for the postal context.
German regression fixtures
Cover German characters, house-number suffixes, and long street names. Berlin with Hauptstrasse 1 alone will not expose encoding or layout faults.
- Round-trip the ß in Schillerstraße
- Export and re-import the ü in München
- Accept 18a and 18-20
- Preserve the leading zero in 01067
- Keep long streets clear of mobile copy controls
Regional consistency does not establish existence
A record can look German and still not identify a real premises. Use generated data for development and QA only; delivery workflows need an authorized address service.
Reviewing the complete German address data path
Choose a fixed fixture containing an eszett, an umlaut, and an alphanumeric house number. Edit it in the UI, then round-trip it through JSON, database storage, and CSV. At every boundary, compare the actual Unicode string rather than checking that the result remains readable. Strasse is readable, for example, but it is not the same value the user entered as Straße.
Next compare storage components with localized print order. If streetName and houseNumber are separate columns, the German renderer places street first and number second. The postcode-city line places PLZ first. These render rules belong outside the database schema so the same stored components can support a local label, an international label, and a structured API response.
Finally render from an international sending context. Confirm that the full country name occupies the bottom line, no D- prefix appears before PLZ, and all address lines remain flush left. Use the real label width: a desktop preview can hide clipping that appears on a compact envelope window.
- Keep Straße, München, and 18a in one regression fixture
- Compare UI, API, database, and exported values
- Test stored fields separately from localized composition
- Inspect long streets at the actual label width
Frequently asked questions
Does the house number go before or after the street in Germany?
The usual German format puts the street first and house number after it, such as Schillerstraße 18.
Should I add D- before a German postcode?
No. Deutsche Post says not to place a country abbreviation before the postcode in international addresses.
Why not store a house number as an integer?
House numbers can contain letters, hyphens, or ranges, such as 18a or 18-20.
