Versio

Belgisch rekeningnummer Regex

Overzicht Reageren

Jos Vermassen

Jos Vermassen

20/01/2012 12:14:21
Quote Anchor link
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).
Gewijzigd op 20/01/2012 12:14:42 door Jos Vermassen
 
PHP hulp

PHP hulp

23/05/2012 22:36:40
Gesponsorde koppelingen:
 
- SanThe -

- SanThe -

20/01/2012 12:28:33
Quote Anchor link
Wat heb je al geprobeerd?
 
Chris
Beheerder

Chris

20/01/2012 13:14:17
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
[0-9]{3}-[0-9]{7}-[0-9]{2}
 
Roel van de Water
Moderator

Roel van de Water

20/01/2012 13:45:15
Quote Anchor link
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.
 
Kris Peeters

Kris Peeters

20/01/2012 13:52:26
Quote Anchor link
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 ...

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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;
}

?>
 
Jacco Brandt

Jacco Brandt

20/01/2012 14:38:43
Quote Anchor link
Chris, je moet de pijltjes escapen. Verder is het aangeven van het begin/eind wel handig. Dus zo:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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);

}


?>
 
Chris
Beheerder

Chris

20/01/2012 14:44:17
Quote Anchor link
@Jacco, ik wist niet dat je de - buiten identifiers moest escapen! Bij mij werkt de regex namelijk met zowel met als zonder escapen..?
 
Kris Peeters

Kris Peeters

20/01/2012 16:21:45
Quote Anchor link
Met de mijne er bij ... (doe er mee wat je wil)
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
<?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);
  }
}

?>
 
Jacco Brandt

Jacco Brandt

20/01/2012 16:26:03
Quote Anchor link
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
 
Kris Peeters

Kris Peeters

20/01/2012 17:07:18
Quote Anchor link
Ja, die mag er inderdaad ook bij.
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
 
Jacco Brandt

Jacco Brandt

20/01/2012 17:11:48
Quote Anchor link
Fout, de standaard retourwaarde is null.
 



Overzicht Reageren