Er zijn in Nederland twee soorten nummerreeksen bij bankrekeningnummers. Vanaf 2009 komen deze alleen bij de ING voor (na de intregratie van de Postbank, waarbij het woord „Giro” is vervallen). De voormalige Postbank-rekeningnummers (hieronder ook gironummers genoemd) blijven na de naamswijziging 1 tot 7 cijfers lang, de overige zijn 9 of 10 cijfers (respectievelijk betaal- en overige rekeningen).
De andere banken kennen traditioneel alleen maar de 9 of 10 cijferige nummers. Op termijn zal het internationale bankrekeningnummer (IBAN) samen met BIC de nieuwe standaard worden. Voor Nederland betekent dit dat het (negencijferige) rekeningnummer zal worden omgezet in een rekeningnummer met achttien posities. Er komen dan Europese standaarden voor overboekingen en automatische incasso’s. Deze nieuwe Europese standaarden hebben de benaming SEPA Credit Transfer (Europese overboeking) en SEPA Direct Debit (Europese incasso).
De voormalige Postbankrekeningnummers hebben geen controlegetal, die van de andere banken wel. Een Nederlands banknummer controleren is niet zo moeilijk, zeker niet met onderstaande code.
In onderstaande code ga ik ervan uit dat de code wordt gebruikt om de invoer in een (Drupal-)formulier te valideren.
Hieronder wordt gesproken over de elfproef. De officiële benaming is: modulo 11 controle.
In de validatiefase van een formulier is een controle op bank- of gironummer noodzakelijk. Er zijn een aantal controles van belang:
Een voorbeeld van deze controle is (verbeterde versie van 13 mei 2010):
// verwijder spaties voor / achter het nummer
$banknr = trim($edit['banknummer'];
// is het nummer leeg --> fout
if ($banknr == '') {
form_set_error('bankrekening', 'Bankrekening is verplicht');
}
// rekeningnummer: alleen cijfers
else if (!is_numeric($banknr)) {
form_set_error('bankrekening', 'De bankrekening bevat ongeldige tekens');
}
else {
// verwijder voorloopnullen
while (substr($banknr, 0, 1) == '0' && strlen($banknr > 0)) {
$banknr = substr($banknr, 1);
}
// is het nummer 0?
else if ($banknr == 0) {
form_set_error('bankrekening', 'De bankrekening is ongeldig');
}
// rekeningnummer: controle op lengte
$len = strlen($banknr);
if ($len > 10) {
return 'De bankrekening bevat te veel cijfers';
}
// lengtecontrole alleen op lengte 8: controle hierboven:
// minimaal 1, veldlengte = maximaal 9 of 10 cijfers: in de formulier opties te zetten
switch ($len) {
case 9:
case 10:
// bankrekening -> controle met elfproef
if (elfproef($banknr))
form_set_error('bankrekening', 'De bankrekening is onbestaanbaar');
break;
case 8:
// een Nederlands rekeningnummer kan nooit 8 lang zijn
form_set_error('bankrekening', 'De bankrekening is fout: een rekeningnummer van 8 cijfers bestaat niet');
break;
default:
// een postbank-nummer
break;
}
}
/**
* controleer een banknummer met behulp van de elfproef
* returns: true als fout, false als voldoet aan de proef
*/
function elfproef($banknr) {
$res = 0;
// vermenigvuldigingsfactor = lengte van de string.
// Officieel kan een banknummer 9 of 10 cijfers zijn !
$verm = strlen($banknr);
for ($i = 0; $i < strlen($banknr); $i++, $verm--) {
$res += substr($banknr, $i, 1) * $verm;
}
return ($res % 11);
}
Wilt u uw eigen rekeningnummer controleren? Test het hier.
Een controle-programma voor een IBAN / SEPA nummer staat hier.


