Check bankrekeningnummer

Door Josh , 16 jaar geleden, 35.147x bekeken

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

  1. check-bankrekeningnummer

 

Er zijn 46 reacties op 'Check bankrekeningnummer'

PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
- -
- -
16 jaar geleden
 
0 +1 -0 -1
Mooi. Voorbeeldje?
Josh
Josh
16 jaar geleden
 
0 +1 -0 -1
komt eraan
Jasper
jasper
16 jaar geleden
 
0 +1 -0 -1
in belgie is een bankrekeningnummer XXX-XXXXXXX-XX,
en als je de tien eerste cijfers deelt door 97, zijn de twee laatste cijfers de rest.
Josh
Josh
16 jaar geleden
 
0 +1 -0 -1
Voorbeeld is toegevoegd.
Het is wel zo dat alleen gecheckt wordt op numerieke karakters en het resultaat is waar of niet waar.
Als je een letter ertussen typt, zal het voorbeeld het prima slikken.
- -
- -
16 jaar geleden
 
0 +1 -0 -1
Heel makkelijk kijken of het een postbank is. Als het goed is begint een postbanknummer met een 'P'. Dan zet je gewoon bij je invulveld: 'Postbankrekeningen beginnen met een 'P''. Dan is dat ook weer opgelost.

Verder mooi scriptje!
K i p
K i p
16 jaar geleden
 
0 +1 -0 -1
Kun je uitleg geven over %? Hoe werkt dat? Hoe kan je het uit je hoofd doen?

Wat is bijvoorbeeld

4%2 ofzo, of 4%4, of iets?
Jan Koehoorn
Jan Koehoorn
16 jaar geleden
 
0 +1 -0 -1
@ Boris: % is de modulo operator. Hij geeft na een deling het rest-getal.

7 % 3 is dus 1
Josh
Josh
16 jaar geleden
 
0 +1 -0 -1
Met % bereken je de restwaarde uit een staartdeling.

Als je 7 deelt door 2, dan kan dat 3 keer (3*2=6) en hou je 1 over (rest 1)

@Herjan: De P vraagt extra invoer van de gebruiker, terwijl het niets toevoegt aan de check.
K i p
K i p
16 jaar geleden
 
0 +1 -0 -1
7 / 3 = 2 rest 1

dus 3%7 is 3?

en 9%3 is 0?

en 17%2 is 1?

en 17%5 is dus 2?
Josh
Josh
16 jaar geleden
 
0 +1 -0 -1
yesss, goed aangepast ;)
PHP Newbie
PHP Newbie
16 jaar geleden
 
0 +1 -0 -1
Jasper:

dit is in belgie dus geen geldig rekeningnummer: 1234567890

omdat 1234567890 % 10 = 0 en geen 90....
Jan Koehoorn
Jan Koehoorn
16 jaar geleden
 
0 +1 -0 -1
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)
PHP script in nieuw venster Selecteer het PHP script
1
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';
    }

?>
K i p
K i p
16 jaar geleden
 
0 +1 -0 -1
Oke mooi:-) Nu snap ik het bedankt

Zo kan je dus ook rijen uit een db om en om doen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
while(fetch_assoc)
{

echo '<div class="n'.($x % 2).'">lala</div>';
$x++

}

?>
Jan Koehoorn
Jan Koehoorn
16 jaar geleden
 
0 +1 -0 -1
@ Boris: eerst $x op 0 zetten!
PHP Newbie
PHP Newbie
16 jaar geleden
 
0 +1 -0 -1
Als ik dit script kopieer en plak, en ik zeg:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
    $nr
= 1234567890;
    
    echo proef11($nr);
?>


Dan krijg ik:

Notice: Undefined variable: csom in F:\server\www\rekening.php on line 15
Josh
Josh
16 jaar geleden
 
0 +1 -0 -1
@PHP Newbie: Ik heb em aangepast.

@Jan: Is ook mooie code. Ik heb echter wel Postbanknummers meegenomen, omdat er toch doorgaans maar één invulveld is voor een bankrekeningnummer. En mijn bedoeling was om de invoer daarvan te checken.
Jan Koehoorn
Jan Koehoorn
16 jaar geleden
 
0 +1 -0 -1
@ PHP Newbie: klopt. Je moet hem als een string meegeven waarschijnlijk. In de praktijk zal hij uit een formulier komen, en dan is dat automatisch al zo.
Jan Koehoorn
Jan Koehoorn
16 jaar geleden
 
0 +1 -0 -1
@ Jos: ik heb even gesnuffeld op internet, maar ik kan geen sluitende voorwaarden voor een geldig postbanknummer vinden. Het hoeft niet speciaal met een P te beginnen. Het enige dat ik kan vinden is dat het meestal niet langer dan 7 tekens is.
Josh
Josh
16 jaar geleden
 
0 +1 -0 -1
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.
PHP Newbie
PHP Newbie
16 jaar geleden
 
0 +1 -0 -1
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?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>
Jan Koehoorn
Jan Koehoorn
16 jaar geleden
 
0 +1 -0 -1
@ PHP Newbie: ziet er goed uit. Ik zou die preg_replace er nog aan toevoegen, zodat alle niet-numerieke tekens eruit gefilterd worden.
Josh
Josh
16 jaar geleden
 
0 +1 -0 -1
PHP Newbie, jouw functies geven aan dat het bankrekeningnummer fout is als de gebruiker er toevallig punten bij in heeft getypt. Is niet echt gebruikersvriendelijk lijkt me. Je zou de preg_replace van Jan er nog aan toe kunnen voegen.
PHP Newbie
PHP Newbie
16 jaar geleden
 
0 +1 -0 -1
zie edit.

voorbeeldje staat trouwens hier
Josh
Josh
16 jaar geleden
 
0 +1 -0 -1
Postbanknummers zijn nooit langer dan 7 cijfers, en nooit korter dan 3 cijfers
Sebastiaan
Sebastiaan
16 jaar geleden
 
0 +1 -0 -1
@ PHP Newbie
Echt en super script. Mijn complimenten heel netjes door de mogelijkheid van de postbank nummers.
Benny Lava
Benny Lava
16 jaar geleden
 
0 +1 -0 -1
Bestaan er rekeningnummers met 3 cijfers?
want het script van Jos zegt van wel xD
Josh
Josh
16 jaar geleden
 
0 +1 -0 -1
Ja die bestaan, en niet alleen voor noodfondsen oid, maar ook particulieren kunnen een postbanknummer hebben van 3 cijfers
Frank -
Frank -
16 jaar geleden
 
0 +1 -0 -1
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.
Mich
mich
16 jaar geleden
 
0 +1 -0 -1
huh, heb net getest met postbank nummer en er staat dat het correct is
Josh
Josh
16 jaar geleden
 
0 +1 -0 -1
@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 ;-)
Frank -
Frank -
16 jaar geleden
 
0 +1 -0 -1
@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.
Josh
Josh
16 jaar geleden
 
0 +1 -0 -1
Ja, is mogelijk. Maar voorlopig voldoet de functie voor mij.
Wel grappig trouwens, ik lees net via Google dat Girorekening 1 daadwerkelijk ook bestaat.... als zijnde de Nederlandsche Schatkist!
Wouter
Wouter
16 jaar geleden
 
0 +1 -0 -1
waar begin ik mijn eigen topic en zo soms iemand hulp willen bieden aan mij over html .....

contacteer mij
Stefan
Stefan
16 jaar geleden
 
0 +1 -0 -1
Offtopic:
@ Wouter: Plaats !!nóóit!! je mail adres zomaar ergens op je site. Gevolg in merendeel van de gevallen: spam.


16 jaar geleden
 
0 +1 -0 -1
en wat is dan eigenlijk de opbouw van een postbank rekening nummer of een gewoon rekening nummer in nederland ? (want ik wooon in belgie :D)
PHP Newbie
PHP Newbie
16 jaar geleden
 
0 +1 -0 -1
xxxx.xx.xxx


16 jaar geleden
 
0 +1 -0 -1
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
Frank -
Frank -
16 jaar geleden
 
0 +1 -0 -1
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.
Josh
Josh
16 jaar geleden
 
0 +1 -0 -1
@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.
Jan Veenstra
Jan Veenstra
16 jaar geleden
 
0 +1 -0 -1
Bankrekeningnummer 1234 is correct.

Volgens mij klopt daar iets niet...
Bas Kreleger
Bas Kreleger
16 jaar geleden
 
0 +1 -0 -1
Postbank? Lees de discussie anders eerst even voordat je uitspraken gaat doen ;).
Tjerk Vroon
Tjerk Vroon
16 jaar geleden
 
0 +1 -0 -1
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.
Bike4live
bike4live
15 jaar geleden
 
0 +1 -0 -1
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.
Frank -
Frank -
15 jaar geleden
 
0 +1 -0 -1
@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.
- -
- -
15 jaar geleden
 
0 +1 -0 -1
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
PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Appz
Appz
14 jaar geleden
 
0 +1 -0 -1
Leuk om te weten: als je je BSN/sofinummer neemt en het laatste cijfer met 1 verlaagt, dan werkt de elfproef ook.

Om te reageren heb je een account nodig en je moet ingelogd zijn.

Inhoudsopgave

  1. check-bankrekeningnummer

Labels

  • Geen tags toegevoegd.

Navigatie

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.