The Netherlands runs one of the leanest IBAN formats in existence: 18 characters total, with the BBAN pattern ^[A-Z]{4}[0-9]{10}$. There is no branch code and no separate domestic check field in the layout, a reflection of how centralised Dutch banking already was before SEPA.
Structure
The registry example NL91 ABNA 0417 1643 00 (a published SWIFT registry test value, not a live account) splits into:
NL91- country code and IBAN check digitsABNA- 4-letter bank code, aligned with the bank’s BIC (ABN AMRO here)0417164300- the 10-digit account number, left-padded with zeros
The elfproef legacy
Before IBANs, Dutch account numbers came in two flavours: ordinary bank accounts, which had to pass the elfproef (multiply each digit by its position, and the sum must divide by 11), and shorter Postbank giro numbers, which followed no such rule. When the two systems merged into the IBAN era, the elfproef survived as a useful plausibility check for most NL account numbers but was never made part of the IBAN specification. A good validator can flag an NL IBAN whose account portion fails the 11-test as suspicious while still acknowledging it may be a legitimate giro-heritage number.
Practical notes
The Netherlands is a SEPA founding member, and Dutch payment culture moved to IBAN-only earlier and more completely than most countries; domestic forms, salary systems and the ubiquitous iDEAL online payment flow all quote the full IBAN rather than any legacy short number. Because the format is short and the bank code is human-readable, Dutch users often spot typos themselves - a transfer form showing RABO when you bank with ING is an obvious red flag.
Structural validity remains a limited promise. An 18-character string with a correct checksum and a real bank code can still point to a closed or never-issued account. Dutch banks pioneered IBAN-Naam Controle (name checking) years before the EU mandated Verification of Payee, precisely because format checks alone cannot confirm who, if anyone, is behind an account number.