Belgisch rekeningnummer Regex
het lukt me niet echt om de regex te maken voor een belgisch rekeningnummer, kan iemand me hiermee helpen?
Het rekeningnummer bestaat alleen maar uit cijfers en ziet er zo uit: xxx-xxxxxxx-xx (3-7-2).
Het rekeningnummer bestaat alleen maar uit cijfers en ziet er zo uit: xxx-xxxxxxx-xx (3-7-2).
Gewijzigd op 20/01/2012 12:14:42 door Jos Vermassen
Gesponsorde koppelingen:
Wat heb je al geprobeerd?
Het zou interessant zijn als iemand hier een keer een tutorial over zou maken.
Regexen zien er altijd zo ingewikkeld uit, ik zou er best mee willen werken, maar ik zou niet weten hoe.
Regexen zien er altijd zo ingewikkeld uit, ik zou er best mee willen werken, maar ik zou niet weten hoe.
Als je trouwens nog een extra controle wil ...
De laatste twee cijfers zijn een controlegetal.
Je neemt de eerste 10 cijfers en plakt die aan mekaar, alsof je een nieuw getal hebt van 10 cijfers; dus zonder liggend streepje.
Dan deel je dat getal door 97 (hoogste priemgetal onder 100).
Je controlegetal is de rest ( http://nl.wikipedia.org/wiki/Delen ) van die deling.
of in php ...
De laatste twee cijfers zijn een controlegetal.
Je neemt de eerste 10 cijfers en plakt die aan mekaar, alsof je een nieuw getal hebt van 10 cijfers; dus zonder liggend streepje.
Dan deel je dat getal door 97 (hoogste priemgetal onder 100).
Je controlegetal is de rest ( http://nl.wikipedia.org/wiki/Delen ) van die deling.
of in php ...
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
<?php
// klopt deze 16? laat ons zien
echo controle_getal("091-0122401-16"); // dit rekeningnummer staat op Wikipedia
// merk op, de functie gaat er van uit dat al gecontroleerd is dat het rekeningnummer goed geformuleerd is
function controle_getal($rekeningnummer) {
$teller = (int) (substr($rekeningnummer, 0, 3) . substr($rekeningnummer, 4, 7));
$rest = $teller % 97;
return $rest;
}
?>
// klopt deze 16? laat ons zien
echo controle_getal("091-0122401-16"); // dit rekeningnummer staat op Wikipedia
// merk op, de functie gaat er van uit dat al gecontroleerd is dat het rekeningnummer goed geformuleerd is
function controle_getal($rekeningnummer) {
$teller = (int) (substr($rekeningnummer, 0, 3) . substr($rekeningnummer, 4, 7));
$rest = $teller % 97;
return $rest;
}
?>
Chris, je moet de pijltjes escapen. Verder is het aangeven van het begin/eind wel handig. Dus zo:
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
<?php
function validBankNumber($number)
{
return (preg_match('/^[0-9]{3}\-[0-9]{7}\-[0-9]{2}$/', $number) == 1);
}
?>
function validBankNumber($number)
{
return (preg_match('/^[0-9]{3}\-[0-9]{7}\-[0-9]{2}$/', $number) == 1);
}
?>
@Jacco, ik wist niet dat je de - buiten identifiers moest escapen! Bij mij werkt de regex namelijk met zowel met als zonder escapen..?
Met de mijne er bij ... (doe er mee wat je wil)
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
$number1 = "091-0122401-16";
$number2 = "091-0122401-32";
echo $number1 . ' geldig? ' . (int) validBankNumber($number1) . '<br/>' ;
echo $number2 . ' geldig? ' . (int) validBankNumber($number2) . '<br/>' ;
function controle_getal($rekeningnummer) {
$teller = (int) (substr($rekeningnummer, 0, 3) . substr($rekeningnummer, 4, 7));
$rest = $teller % 97;
return $rest;
}
function validBankNumber($number) {
if (preg_match('/^[0-9]{3}\-[0-9]{7}\-[0-9]{2}$/', $number) == 1) {
return controle_getal($number) == substr($number, 12, 2);
}
}
?>
$number1 = "091-0122401-16";
$number2 = "091-0122401-32";
echo $number1 . ' geldig? ' . (int) validBankNumber($number1) . '<br/>' ;
echo $number2 . ' geldig? ' . (int) validBankNumber($number2) . '<br/>' ;
function controle_getal($rekeningnummer) {
$teller = (int) (substr($rekeningnummer, 0, 3) . substr($rekeningnummer, 4, 7));
$rest = $teller % 97;
return $rest;
}
function validBankNumber($number) {
if (preg_match('/^[0-9]{3}\-[0-9]{7}\-[0-9]{2}$/', $number) == 1) {
return controle_getal($number) == substr($number, 12, 2);
}
}
?>
Chris Horeweg op 20/01/2012 14:44:17:
@Jacco, ik wist niet dat je de - buiten identifiers moest escapen! Bij mij werkt de regex namelijk met zowel met als zonder escapen..?
Ik heb daar pas nog veel problemen mee gehad, misschien is het iets met php-versies?
@kris, je bent nog een return false; vergeten.
Gewijzigd op 20/01/2012 16:26:53 door Jacco Brandt
Ja, die mag er inderdaad ook bij.
Default krijgt ge sowieso wel een return false, indien de functie niets returnt ... maar inderdaad.
Default krijgt ge sowieso wel een return false, indien de functie niets returnt ... maar inderdaad.
Gewijzigd op 20/01/2012 17:07:33 door Kris Peeters
Fout, de standaard retourwaarde is null.



