Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?
- $bbanFrance = array('30002005500000157841Z25' => true, '11808009101234567890147'=>true, '11808009101234567890146'=>false);
- foreach( $bbanFrance as $bban => $expected){
- print $bban;
- if( is_valid_fr_bban($bban) == $expected){
- print " is validated as expected.";
- } else {
- print " VALIDATION ERROR";
- }
- print PHP_EOL;
- }
- function is_valid_fr_bban($bban){
- $bbanNum = lettersToNumbers($bban);
- if(is_null($bbanNum)){
- print "NULL";
- return false;
- }
- $checksum = substr($bbanNum,-2);
- $bank = substr($bbanNum,0,5);
- $office = substr($bbanNum,5,5);
- $account = substr($bbanNum,10,11);
- $sum = bcadd( bcmul("89", $bank) , bcmul("15", $office));
- $sum = bcadd( $sum, bcmul("3", $account));
- $calcChecksum = bcsub("97", bcmod($sum, "97"));
- return $checksum == $calcChecksum;
- }
- function lettersToNumbers($bban){
- $allNumbers = "";
- $conversion = array(
- "A" => 1, "B" => 2, "C" => 3, "D" => 4, "E" => 5, "F" => 6, "G" => 7, "H" => 8, "I" => 9,
- "J" => 1, "K" => 2, "L" => 3, "M" => 4, "N" => 5, "O" => 6, "P" => 7, "Q" => 8, "R" => 9,
- "S" => 2, "T" => 3, "U" => 4, "V" => 5, "W" => 6, "X" => 7, "Y" => 8, "Z" => 9
- );
- for ($i=0; $i < strlen($bban); $i++)
- {
- if(is_numeric($bban{$i})){
- $allNumbers .= $bban{$i};
- } else {
- $letter = strtoupper($bban{$i});
- if(array_key_exists($letter, $conversion)){
- $allNumbers .= $conversion[$letter];
- } else {
- return null;
- }
- }
- }
- return $allNumbers;
- }
- /*
- Clé RIB = 97 - ( (
- 89 x Code banque +
- 15 x Code guichet +
- 3 x Numéro de compte ) modulo 97 )$ */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement