Check bankrekeningnummer
Bankrekeningnummers in Nederland hebben een controlemechanisme in zich. Je kunt op het 9-cijferige nummer de zogenaamde 11-proef loslaten, om te checken of het nummer correct is.
Helaas geldt dat niet voor Postbanknummers. Die bestaan uit 3 tot en met 7 cijfers en kennen verder geen check.
De functie geeft TRUE als het een Postbanknummer zou kunnen zijn, of als het een correct bankrekeningnummer is.
Deze check kan wel eens handig zijn als je eenmalige incasso's wil innen.
Gesponsorde koppelingen
PHP script bestanden
46 reacties op 'Check bankrekeningnummer'
Gesponsorde koppelingen
Een Postbanknummer checken is bijna niet te doen. Denk aan dingen als rekening 555, die ook geldig zijn. Als je alleen op banknummers waarop de 11-proef van toepassing is wilt checken, kan het nog ietsje eleganter:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
error_reporting (E_ALL);
function my_11proef ($reknr) {
$reknr = preg_replace ('/[^0-9]/', '', $reknr); // alle niet-numerieke tekens strippen
$n = strlen ($reknr); // alvast $n bepalen
if ($n != 9) return false; // wegwezen
$csom = 0; // deze initialiseren, anders krijg je een notice
$pos = 9;
for ($i = 0; $i < $n; $i++) {
$csom += ($reknr{$i} * $pos--); // hier gebeurt de magic!
}
return ($csom % 11 == 0); // $mod niet nodig; kan ik 1 regel code
}
if (my_11proef ('56.35.35.164')) {
echo 'klopt';
}
else {
echo 'klopt niet';
}
?>
error_reporting (E_ALL);
function my_11proef ($reknr) {
$reknr = preg_replace ('/[^0-9]/', '', $reknr); // alle niet-numerieke tekens strippen
$n = strlen ($reknr); // alvast $n bepalen
if ($n != 9) return false; // wegwezen
$csom = 0; // deze initialiseren, anders krijg je een notice
$pos = 9;
for ($i = 0; $i < $n; $i++) {
$csom += ($reknr{$i} * $pos--); // hier gebeurt de magic!
}
return ($csom % 11 == 0); // $mod niet nodig; kan ik 1 regel code
}
if (my_11proef ('56.35.35.164')) {
echo 'klopt';
}
else {
echo 'klopt niet';
}
?>
Klopt Jan.
Ik heb in de inleiding aangegeven dat er geen controlemechanisme in de Postbanknummers is ingebouwd. Het enige waarop gecontroleerd kan worden is het aantal cijfers. Dat kunnen er 3 zijn en 7 en alles wat ertussen zit.
Omdat de Postbank geen nummercheck heeft, is ze extra alert of de tenaamstelling overeenkomt met het rekeningnummer. Bij de overige banken gaat het bij eenmalige incasso's wat makkelijker, daar is men niet zo strak op de tenaamstelling.
Ik heb in de inleiding aangegeven dat er geen controlemechanisme in de Postbanknummers is ingebouwd. Het enige waarop gecontroleerd kan worden is het aantal cijfers. Dat kunnen er 3 zijn en 7 en alles wat ertussen zit.
Omdat de Postbank geen nummercheck heeft, is ze extra alert of de tenaamstelling overeenkomt met het rekeningnummer. Bij de overige banken gaat het bij eenmalige incasso's wat makkelijker, daar is men niet zo strak op de tenaamstelling.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
<?php
error_reporting(E_ALL);
function elf_proef($bankrekeningnummer)
{
$som = NULL;
if(strlen($bankrekeningnummer)==9)
{
for ($i=0; $i<=8; $i++)
{
$som += ($bankrekeningnummer[$i] * (9 - $i));
}
// geef resultaat van check terug
if ($som % 11 == 0)
{
return 'Dit is een correct bankrekeningnummer';
}
else
{
return 'Dit is geen geldig bankrekeningnummer';
}
}
else
{
return 'Een bankrekeningnummer moet 9 cijfers bevatten';
}
}
function postbank($rekeningnummer)
{
if(strlen($rekeningnummer) > 7)
{
return 'Bankrekeningnummer te lang voor postbanknummer';
}
elseif(strlen($rekeningnummer) < 3)
{
return 'Bankrekeningnummer te kort voor postbanknummer';
}
else
{
return 'goed';
}
}
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
if(!empty($_POST['reknr']))
{
$_POST['reknr'] = str_replace(' ', '', $_POST['reknr']);
$_POST['reknr'] = str_replace('.', '', $_POST['reknr']);
if(is_numeric($_POST['reknr']))
{
if(isset($_POST['postbank']))
{
echo postbank($_POST['reknr']).'<br /><br />';
}
else
{
echo elf_proef($_POST['reknr']).'<br /><br />';
}
}
else
{
echo 'Er mogen alleen cijfers in je bankrekeningnummer voorkomen<br /><br />';
}
}
else
{
echo 'Niks opgegeven<br /><br />';
}
}
?>
<form action="#" method="POST">
Rekeningnr: <input type="text" name="reknr"<?=!empty($_POST['reknr']) ? ' value="'.$_POST['reknr'].'"' : '' ?> />
<label><input type="checkbox" name="postbank" value="ja"<?=isset($_POST['postbank']) ? ' checked="checked"' : '' ?> /> postbank</label><br />
<br />
<input name="submit" type="submit">
</form>
error_reporting(E_ALL);
function elf_proef($bankrekeningnummer)
{
$som = NULL;
if(strlen($bankrekeningnummer)==9)
{
for ($i=0; $i<=8; $i++)
{
$som += ($bankrekeningnummer[$i] * (9 - $i));
}
// geef resultaat van check terug
if ($som % 11 == 0)
{
return 'Dit is een correct bankrekeningnummer';
}
else
{
return 'Dit is geen geldig bankrekeningnummer';
}
}
else
{
return 'Een bankrekeningnummer moet 9 cijfers bevatten';
}
}
function postbank($rekeningnummer)
{
if(strlen($rekeningnummer) > 7)
{
return 'Bankrekeningnummer te lang voor postbanknummer';
}
elseif(strlen($rekeningnummer) < 3)
{
return 'Bankrekeningnummer te kort voor postbanknummer';
}
else
{
return 'goed';
}
}
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
if(!empty($_POST['reknr']))
{
$_POST['reknr'] = str_replace(' ', '', $_POST['reknr']);
$_POST['reknr'] = str_replace('.', '', $_POST['reknr']);
if(is_numeric($_POST['reknr']))
{
if(isset($_POST['postbank']))
{
echo postbank($_POST['reknr']).'<br /><br />';
}
else
{
echo elf_proef($_POST['reknr']).'<br /><br />';
}
}
else
{
echo 'Er mogen alleen cijfers in je bankrekeningnummer voorkomen<br /><br />';
}
}
else
{
echo 'Niks opgegeven<br /><br />';
}
}
?>
<form action="#" method="POST">
Rekeningnr: <input type="text" name="reknr"<?=!empty($_POST['reknr']) ? ' value="'.$_POST['reknr'].'"' : '' ?> />
<label><input type="checkbox" name="postbank" value="ja"<?=isset($_POST['postbank']) ? ' checked="checked"' : '' ?> /> postbank</label><br />
<br />
<input name="submit" type="submit">
</form>
Bank- en girorekeningen bestaan, inclusief voorloopnullen, uit 10 cijfers. Dat is een eis van de DNB. Alles wat er is geroepen over 3 tot 7 cijfers voor girorekeningen en 9 voor bankrekeningen, klopt dus niet. Meer informatie kun je vinden bij de DNB en Interpay.
Girorekening nummer 1 is dus in werkelijkheid rekening 0000000001. En alles wat niet aan de elf-proef voldoet, zou dus een girorekening kunnen zijn. Wil je daar zekerheid over hebben, dan zul je een bestand moeten opsturen naar de Postbank om daar een NaamNummerControle uit te laten voeren. Hiervoor moet je wel eerst een apart contract afsluiten met de Postbank.
Edit: IBAN-nummers laat ik hier even buiten beschouwing.
Girorekening nummer 1 is dus in werkelijkheid rekening 0000000001. En alles wat niet aan de elf-proef voldoet, zou dus een girorekening kunnen zijn. Wil je daar zekerheid over hebben, dan zul je een bestand moeten opsturen naar de Postbank om daar een NaamNummerControle uit te laten voeren. Hiervoor moet je wel eerst een apart contract afsluiten met de Postbank.
Edit: IBAN-nummers laat ik hier even buiten beschouwing.
@Frank
Technisch, in het kader van het nationale betalingsverkeer zul je vast gelijk hebben. Maakt mij niet uit hoor, maar volgens mij sla je een beetje door en ga je voorbij aan het doel van de functie.
Ik heb hier zelf een bankpasje van de rabobank en daar staan echt maar 9 cijfers op. Als men mij naar mijn bankrekeningnummer vraagt, dan zal ik die 9 cijfers opgeven.
En dan is het handig als de website een foutmelding geeft als ik per ongeluk een cijfertje ben vergeten, of een typ-foutje heb gemaakt.
Daar is deze functie voor bedoeld, niets meer, maar ook niets minder ;-)
Technisch, in het kader van het nationale betalingsverkeer zul je vast gelijk hebben. Maakt mij niet uit hoor, maar volgens mij sla je een beetje door en ga je voorbij aan het doel van de functie.
Ik heb hier zelf een bankpasje van de rabobank en daar staan echt maar 9 cijfers op. Als men mij naar mijn bankrekeningnummer vraagt, dan zal ik die 9 cijfers opgeven.
En dan is het handig als de website een foutmelding geeft als ik per ongeluk een cijfertje ben vergeten, of een typ-foutje heb gemaakt.
Daar is deze functie voor bedoeld, niets meer, maar ook niets minder ;-)
@Jos: En wanneer ze volgende week een 10-cijferig bankrekingnummer uitgeven? Dan kun je alsnog een goede controle gaan bouwen. Volgens mij worden deze al uitgegeven, maar dat kan ik mis hebben.
Houd je aan de specificaties en ga op basis van die gegevens een fraaie controle bouwen. Zoveel moeite is dat niet, deze gegevens zijn eenvoudig op te vragen bij jouw bank of Interpay.
Houd je aan de specificaties en ga op basis van die gegevens een fraaie controle bouwen. Zoveel moeite is dat niet, deze gegevens zijn eenvoudig op te vragen bij jouw bank of Interpay.
Dit script is zinloos!?
De kans dat het een postbank rekening is vrij groot [en die is niet te controlleren tenzij je contract hebt met postbank].
Buitenlandse rekening nummers vallen buiten kader.
Sommige mensen voeren hun rekeningnummer met spaties, punten of streepjes in.
Postbank nummers zijn willekeurig genummerd, momenteel bestaan ze uit 7 posities maar over een paar jaar kunnen er dat gerust 8 zijn omdat alles met 7 op is.
@Frank
Je hebt gelijk. Rekening nummers zijn altijd 10 nummerige maar de voorloopnullen worden meestal (altijd) weggelaten. Zou een beetje onvriendelijk zijn om eerst 5 nullen in te moeten voeren [en dit moet je dan ook eerst aan je gebruiker uitleggen]
@Wouter
Ga naar het forum, verwijder je adres
De kans dat het een postbank rekening is vrij groot [en die is niet te controlleren tenzij je contract hebt met postbank].
Buitenlandse rekening nummers vallen buiten kader.
Sommige mensen voeren hun rekeningnummer met spaties, punten of streepjes in.
Postbank nummers zijn willekeurig genummerd, momenteel bestaan ze uit 7 posities maar over een paar jaar kunnen er dat gerust 8 zijn omdat alles met 7 op is.
@Frank
Je hebt gelijk. Rekening nummers zijn altijd 10 nummerige maar de voorloopnullen worden meestal (altijd) weggelaten. Zou een beetje onvriendelijk zijn om eerst 5 nullen in te moeten voeren [en dit moet je dan ook eerst aan je gebruiker uitleggen]
@Wouter
Ga naar het forum, verwijder je adres
Kortom, alles wat bestaat uit 10 cijfers (dus ook 9 met een voorloopnul) en aan de elf-proef voldoet zou een bankrekeningnummer kunnen zijn, de rest kan een girorekening zijn. Het zegt dus helemaal niets of het rekeningnummer bestaat en/of bij de juiste persoon hoort.
Van bankrekeningen kun je niet achterhalen of de combinatie rekeningnummer-eigenaar correct is, bij girorekeningen is dat wel mogelijk: NaamNummerControle (NNC), vraag de Postbank.
Van bankrekeningen kun je niet achterhalen of de combinatie rekeningnummer-eigenaar correct is, bij girorekeningen is dat wel mogelijk: NaamNummerControle (NNC), vraag de Postbank.
@Webmakerij en @Frank: prima om de tekortkomingen te benadrukken hoor, maar zoals het mij overkomt stellen jullie eigenlijk dat het beter is om helemaal geen check te doen, in plaats van een onvolledige check.
Jullie gaan voorbij aan het doel van het script.
Als je te maken krijgt met (eenmalige) incasso-opdrachten, dan ben je verplicht om de 11-proef op rekeningnummers uit te voeren.
Postbanknummers kun je niet checken, niet anders dan inderdaad de NNC waar Frank het over heeft, maar dat kost geld en is niet verplicht om een eenmalige incasso-opdracht te geven.
Vandaar dat deze "compromis"-check eruit is komen rollen.
Jullie gaan voorbij aan het doel van het script.
Als je te maken krijgt met (eenmalige) incasso-opdrachten, dan ben je verplicht om de 11-proef op rekeningnummers uit te voeren.
Postbanknummers kun je niet checken, niet anders dan inderdaad de NNC waar Frank het over heeft, maar dat kost geld en is niet verplicht om een eenmalige incasso-opdracht te geven.
Vandaar dat deze "compromis"-check eruit is komen rollen.
Postbank nummers kan je niet valideren met de elf-proef.
Voor de overige nederlandse bankrekeningnummers is die mogelijkheid er wel.
Misschien een optie om in het script de volgende check te bouwen: Als het ingevoerde rekeningnummer 1 t/m 7 cijfers heeft, is het hoogstwaarschijnlijk een Postbank rekeningnummer. Bij 9 cijfers moet dan de elf-proef gedaan worden om te controleren of het nummer klopt.
Voor de overige nederlandse bankrekeningnummers is die mogelijkheid er wel.
Misschien een optie om in het script de volgende check te bouwen: Als het ingevoerde rekeningnummer 1 t/m 7 cijfers heeft, is het hoogstwaarschijnlijk een Postbank rekeningnummer. Bij 9 cijfers moet dan de elf-proef gedaan worden om te controleren of het nummer klopt.
Ik zie hierboven nogal wat onwaarheden staan, ik heb al voor verschillende (grote) bedrijven incasso scripts e.d. geschreven dus ik weet waarover ik praat.
Om de lengte te bepalen laat je voorloopnullen weg en tel je alleen de cijfers!
Banknummers:
- 9 of 10 cijfers lang (10 cijfers zijn volgens mij wel al in gebruik, maar nog niet veel)
- Voldoet aan de elfproef.
Girorekeningnummers:
- 3 tot 7 cijfers lang
- elfproef niet van toepassing, er is geen berekende controle mogelijk
- Controle mogelijk via de postbank via naam/nummer.
Daarnaast kun je nog hetvolgende aannemen:
- Een bankrekeningnummer van 8 cijfers bestaat zowieso nooit!
- Rekeningnummers kleiner dan 5 cijfers kun je ook wel afkeuren, omdat dit alleen speciale nummers zijn voor goede doelen e.d.
- Rekeningnummer 123456789 (voldoet aan elfproef) kun je ook wel afkeuren ;-)
- Een P voor een rekeningnummer laten invullen zou ik nooit doen, je kunt aan de hand van het opgegeven aantal cijfers eenvoudig bepalen of het een giro of bank nummer is.
Om de lengte te bepalen laat je voorloopnullen weg en tel je alleen de cijfers!
Banknummers:
- 9 of 10 cijfers lang (10 cijfers zijn volgens mij wel al in gebruik, maar nog niet veel)
- Voldoet aan de elfproef.
Girorekeningnummers:
- 3 tot 7 cijfers lang
- elfproef niet van toepassing, er is geen berekende controle mogelijk
- Controle mogelijk via de postbank via naam/nummer.
Daarnaast kun je nog hetvolgende aannemen:
- Een bankrekeningnummer van 8 cijfers bestaat zowieso nooit!
- Rekeningnummers kleiner dan 5 cijfers kun je ook wel afkeuren, omdat dit alleen speciale nummers zijn voor goede doelen e.d.
- Rekeningnummer 123456789 (voldoet aan elfproef) kun je ook wel afkeuren ;-)
- Een P voor een rekeningnummer laten invullen zou ik nooit doen, je kunt aan de hand van het opgegeven aantal cijfers eenvoudig bepalen of het een giro of bank nummer is.
@bike4live: Jij wilt dus beweren dat de Postbank zijn eigen rekeningnummers niet correct heeft opgesteld?
3 tot 7 cijfers zijn óók gironummers, maar zeker niet de enige. Zo is bv. nummer 1 al genoemd en heb ik daar ook regelmatig mee te maken gehad. De eigenaar (of eigenlijk iemand van de administratie) had nog wel eens wat vragen.
Verder heb ik me een ongeluk getest met 10-cijferige gironummers bij de ING-bank (= eigenaar van Postbank) wat ook niet helemaal voor jan-met-de-korte-achternaam was. Al was het maar om aan de eisen van de DNB te voldoen...
En vergeet niet, deze eisen zijn er mede om IBAN-nummers te kunnen gebruiken! Dat is namelijk gewoon een 10-cijferig rekeningnummer met wat extra gegevens over het land en de bank die het rekeningnummer beheert. Zie ook Wikipedia.
Dat jij in het dagelijkse betalingsverkeer geen voorloopnullen gebruikt of geen betaling doet naar girorekening 1, wil niet zeggen dat deze niet bestaan.
3 tot 7 cijfers zijn óók gironummers, maar zeker niet de enige. Zo is bv. nummer 1 al genoemd en heb ik daar ook regelmatig mee te maken gehad. De eigenaar (of eigenlijk iemand van de administratie) had nog wel eens wat vragen.
Verder heb ik me een ongeluk getest met 10-cijferige gironummers bij de ING-bank (= eigenaar van Postbank) wat ook niet helemaal voor jan-met-de-korte-achternaam was. Al was het maar om aan de eisen van de DNB te voldoen...
En vergeet niet, deze eisen zijn er mede om IBAN-nummers te kunnen gebruiken! Dat is namelijk gewoon een 10-cijferig rekeningnummer met wat extra gegevens over het land en de bank die het rekeningnummer beheert. Zie ook Wikipedia.
Dat jij in het dagelijkse betalingsverkeer geen voorloopnullen gebruikt of geen betaling doet naar girorekening 1, wil niet zeggen dat deze niet bestaan.
Quote:
Bb says (18:30):
Bankrekeningnummer 000000000 is correct.
Bb says (18:30):
met [quote] eromheen moet je dat even hier reageren http://www.phphulp.nl/php/scripts/1/782/
Bb says (18:30):
dan ben je vet slim
Bb says (18:31):
moet je nog ff zeggen dat het totaal % 11 niet 0 moet zijn maar groter dan 0
Bb says (18:31):
(elfproef)
Bb says (18:31):
anders is 000000000 ook geldig
Bb says (18:31):
en ik kan het niet doen, want mijn account is dodo
Bankrekeningnummer 000000000 is correct.
Bb says (18:30):
met [quote] eromheen moet je dat even hier reageren http://www.phphulp.nl/php/scripts/1/782/
Bb says (18:30):
dan ben je vet slim
Bb says (18:31):
moet je nog ff zeggen dat het totaal % 11 niet 0 moet zijn maar groter dan 0
Bb says (18:31):
(elfproef)
Bb says (18:31):
anders is 000000000 ook geldig
Bb says (18:31):
en ik kan het niet doen, want mijn account is dodo
Om te reageren heb je een account nodig en je moet ingelogd zijn.
- Details
Door:
Josh- 7 jaar geleden
- 17.493 x bekeken
- Labels
- Geen tags toegevoegd.
- PHP scripts opties
- PHP algemeen
- Nieuwste PHP scripts
- PHP script toevoegen


PHP hulp
0 seconden vanaf nu