Advertisement
Guest User

Untitled

a guest
Feb 10th, 2016
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.56 KB | None | 0 0
  1. <?
  2.  
  3. $bbanFrance = array('30002005500000157841Z25' => true, '11808009101234567890147'=>true, '11808009101234567890146'=>false);
  4.  
  5. foreach( $bbanFrance as $bban => $expected){
  6. print $bban;
  7. if( is_valid_fr_bban($bban) == $expected){
  8. print " is validated as expected.";
  9. } else {
  10. print " VALIDATION ERROR";
  11. }
  12. print PHP_EOL;
  13. }
  14.  
  15.  
  16. function is_valid_fr_bban($bban){
  17.  
  18. $bbanNum = lettersToNumbers($bban);
  19. if(is_null($bbanNum)){
  20. print "NULL";
  21. return false;
  22. }
  23.  
  24. $checksum = substr($bbanNum,-2);
  25.  
  26. $bank = substr($bbanNum,0,5);
  27. $office = substr($bbanNum,5,5);
  28. $account = substr($bbanNum,10,11);
  29.  
  30. $sum = bcadd( bcmul("89", $bank) , bcmul("15", $office));
  31. $sum = bcadd( $sum, bcmul("3", $account));
  32. $calcChecksum = bcsub("97", bcmod($sum, "97"));
  33.  
  34. return $checksum == $calcChecksum;
  35. }
  36.  
  37. function lettersToNumbers($bban){
  38. $allNumbers = "";
  39. $conversion = array(
  40. "A" => 1, "B" => 2, "C" => 3, "D" => 4, "E" => 5, "F" => 6, "G" => 7, "H" => 8, "I" => 9,
  41. "J" => 1, "K" => 2, "L" => 3, "M" => 4, "N" => 5, "O" => 6, "P" => 7, "Q" => 8, "R" => 9,
  42. "S" => 2, "T" => 3, "U" => 4, "V" => 5, "W" => 6, "X" => 7, "Y" => 8, "Z" => 9
  43. );
  44. for ($i=0; $i < strlen($bban); $i++)
  45. {
  46. if(is_numeric($bban{$i})){
  47. $allNumbers .= $bban{$i};
  48. } else {
  49. $letter = strtoupper($bban{$i});
  50.  
  51. if(array_key_exists($letter, $conversion)){
  52. $allNumbers .= $conversion[$letter];
  53. } else {
  54. return null;
  55. }
  56. }
  57. }
  58. return $allNumbers;
  59. }
  60.  
  61. /*
  62. Clé RIB = 97 - ( (
  63. 89 x Code banque +
  64. 15 x Code guichet +
  65. 3 x Numéro de compte ) modulo 97 )$ */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement