Direct naar de inhoud
test-nummers.nl

IBAN berekenen uit rekeningnummer

Kies een bankcode, vul een rekeningnummer van maximaal 10 cijfers in en je ziet direct het IBAN met de berekening van de controlecijfers. Bedoeld voor testdata en fixtures, niet voor echte rekeningen.

FictiefAlle gegenereerde gegevens zijn fictief en alleen bedoeld voor test- en ontwikkelomgevingen. Een willekeurig geldig nummer kan toevallig bestaan: gebruik het nooit als echt gegeven.

IBAN

Fictief

Zo zijn de controlecijfers berekend

  1. Rekeningnummer aanvullen tot 10 cijfers: 0417164300
  2. Bankcode, rekeningnummer en NL00 achter elkaar: ABNA0417164300NL00
  3. Letters vervangen door getallen (A=10 … Z=35): 101123100417164300232100
  4. Rest na deling door 97: 7
  5. 98 − 7 = 91

Elfproef: gewogen som 154 is deelbaar door 11, zoals bij oude bankrekeningnummers.

Hoe is een Nederlands IBAN opgebouwd?

Een Nederlands IBAN heeft altijd 18 tekens: de landcode NL, twee controlecijfers, een bankcode van vier letters en een rekeningnummer van tien cijfers. Een korter rekeningnummer wordt links aangevuld met nullen.

OnderdeelPositiesVoorbeeld
Landcode1–2NL
Controlecijfers3–491
Bankcode5–8ABNA
Rekeningnummer9–180417164300

Controlecijfers berekenen: uitgewerkt voorbeeld

De controlecijfers volgen uit ISO 7064 MOD 97-10. We rekenen het Nederlandse voorbeeld uit het IBAN-register van SWIFT na: bankcode ABNA, rekeningnummer 417164300.

  1. Vul het rekeningnummer aan tot tien cijfers: 0417164300.
  2. Zet bankcode, rekeningnummer en NL00 achter elkaar: ABNA0417164300NL00.
  3. Vervang elke letter door een getal (A=10, B=11 … Z=35): 101123100417164300232100.
  4. Deel dat getal door 97. De rest is 7.
  5. Controlecijfers = 98 − 7 = 91. Resultaat: NL91 ABNA 0417 1643 00.

Controleren gaat andersom: zet de eerste vier tekens achteraan, vervang de letters en deel door 97. Bij een geldig IBAN is de rest precies 1. Meer over de valkuilen (te grote getallen, voorloopnullen) lees je in IBAN MOD-97 implementeren.

Bankcodes en BIC's van Nederlandse banken

De bankcode op positie 5–8 is gelijk aan de eerste vier tekens van de BIC. De calculator kent deze codes uit de BIC-lijst van de Betaalvereniging:

BankcodeBICBank
ABNAABNANL2AABN AMRO
ASNBASNBNL21ASN Bank
BUNQBUNQNL2Abunq
INGBINGBNL2AING
KNABKNABNL2HKnab
RABORABONL2URabobank
RBRBRBRBNL21RegioBank
SNSBSNSBNL2AASN Bank (voorheen SNS)
TRIOTRIONL2UTriodos Bank
FVLBFVLBNL22Van Lanschot

Bestaande IBANs houden hun bankcode, ook als de bank een andere naam krijgt: in de BIC-lijst staat SNSB inmiddels op naam van ASN Bank.

Wanneer heb je dit nodig bij het testen?

  • Legacy-fixtures omzetten— testdata uit oude systemen bevat vaak nog losse rekeningnummers. Met een vaste bankcode maak je er consistente IBANs van, zodat bestaande testscenario's blijven werken.
  • Bankspecifieke logica — test code die op de bankcode of BIC reageert, bijvoorbeeld de weergave van een banknaam of logo.
  • Randgevallen in validatie — IBANs met controlecijfers onder de 10 (zoals NL02) en rekeningnummers met veel voorloopnullen breken slecht geschreven validators.
  • SEPA-bestanden— voor testbestanden met overboekingen of incasso's heb je IBANs nodig die de MOD 97-controle halen. Voor grote aantallen gebruik je de IBAN Generator of de Rekeningnummer Generator.

IBAN berekenen en valideren in TypeScript

Rekent cijfer voor cijfer modulo 97, dus zonder BigInt en zonder afrondingsfouten bij lange getallen.

function mod97(numeric: string): number {
  let remainder = 0;
  for (const digit of numeric) remainder = (remainder * 10 + Number(digit)) % 97;
  return remainder;
}

const lettersToDigits = (s: string) =>
  s.replace(/[A-Z]/g, (c) => String(c.charCodeAt(0) - 55)); // A=10 ... Z=35

export function nlIbanCheckDigits(bankCode: string, account: string): string {
  const bban = bankCode.toUpperCase() + account.padStart(10, '0');
  return String(98 - mod97(lettersToDigits(bban + 'NL00'))).padStart(2, '0');
}

export function isValidNlIban(input: string): boolean {
  const iban = input.replace(/\s/g, '').toUpperCase();
  if (!/^NL\d{2}[A-Z]{4}\d{10}$/.test(iban)) return false;
  return mod97(lettersToDigits(iban.slice(4) + iban.slice(0, 4))) === 1;
}

Veelgestelde vragen

Kan ik hiermee het IBAN van een echte rekening berekenen?

Doe dat niet. Gebruik voor een echte rekening het IBAN dat de bank of de rekeninghouder opgeeft, bijvoorbeeld op de bankpas, in de app of op een afschrift. De Betaalvereniging raadt af een oud rekeningnummer zelf om te zetten: een tikfout in een kort nummer valt dan niet op. Deze tool rekent de standaardformule uit en is bedoeld voor testdata.

Waarom beginnen sommige IBANs met NL02 of NL09?

De controlecijfers zijn altijd twee posities. Komt uit 98 − rest een getal onder de 10, dan krijgt het een voorloopnul. Een validator die de controlecijfers als getal leest en de nul kwijtraakt, keurt deze IBANs ten onrechte af: een goede testcase.

Moet het rekeningnummer aan de elfproef voldoen?

Nee. De IBAN-controle (MOD 97) staat los van de elfproef. Oude bankrekeningnummers voldeden er wel aan, gironummers niet, en sinds 1 juli 2020 hoeven de laatste tien cijfers van een nieuw Nederlands IBAN er ook niet meer aan te voldoen. De tool laat wel zien of je invoer de elfproef haalt.

Wat gebeurt er met een rekeningnummer van minder dan 10 cijfers?

Het wordt links aangevuld met nullen tot 10 cijfers. Rekeningnummer 417164300 wordt 0417164300, en met bankcode ABNA ontstaat NL91 ABNA 0417 1643 00, het Nederlandse voorbeeld uit het IBAN-register van SWIFT.

Bestaat een IBAN met kloppende controlecijfers ook echt?

Niet per se. MOD 97 vangt tikfouten af, maar zegt niets over het bestaan van een rekening. De IBANs die je hier berekent zijn fictief en alleen bedoeld voor testomgevingen.

Gerelateerde tools