Germany uses one of the more straightforward IBAN layouts in Europe. Every German IBAN is exactly 22 characters long and consists only of digits after the initial country code: the prefix DE, two check digits, and an 18-digit BBAN matching the pattern ^[0-9]{18}$.
Structure of a German IBAN
- Positions 1-2: country code
DE - Positions 3-4: IBAN check digits (ISO 7064 MOD-97-10)
- Positions 5-12: the Bankleitzahl (BLZ), Germany’s 8-digit bank sort code
- Positions 13-22: the 10-digit account number (Kontonummer), left-padded with zeros if the domestic account number is shorter
The official registry example is DE89 3704 0044 0532 0130 00. This is a published test value from the SWIFT IBAN registry, not a real account. In this example, 37040044 is the BLZ and 0532013000 is the padded account number.
SEPA and domestic context
Germany is a founding SEPA member, so this IBAN works for euro credit transfers and direct debits across the whole SEPA zone. Unlike Belgium or Hungary, the German BBAN carries no separate national check digit at IBAN level. Individual banks do apply internal check-digit schemes to their Kontonummern (the Bundesbank publishes dozens of these per-bank algorithms), but those checks are not visible in the IBAN structure and a validator cannot apply them without knowing the bank’s specific method.
A practical pitfall: many older German account numbers have fewer than 10 digits, and a few banks pad them in non-obvious positions. Converting a BLZ plus Kontonummer to an IBAN by naive zero-padding is therefore not always safe; the bank’s own published IBAN is authoritative.
Validation notes
Checking a German IBAN means verifying three things: the length is 22, the BBAN is all digits, and the MOD-97 checksum over the rearranged string equals 1. All three can be done offline. What no offline check can tell you is whether the account is open and belongs to the person you intend to pay. For that, EU payment providers now run Verification of Payee name matching. Treat a “valid” result as a formatting check, nothing more. If you need a structurally valid test value beyond the registry example above, use the generator on this page.