Advertisement
vencinachev

IBAN - ibanchecker.php

Mar 31st, 2021
797
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 1.25 KB | None | 0 0
  1. <?php
  2.  
  3. function checkIBAN($iban){
  4.     $patternIBAN = "/^[0-9A-Z]{22}$/";
  5.     if (!preg_match($patternIBAN, $iban)) {
  6.         return false;
  7.     }
  8.    
  9.     if ($iban[0] != 'B' || $iban[1] != 'G'){
  10.         return false;
  11.     }
  12.    
  13.     $str = substr($iban, 4) . substr($iban, 0, 4);
  14.     $num = "";
  15.     for ($i = 0; $i < strlen($str); $i++){
  16.          if (is_numeric($str[$i])){
  17.             $num = $num . $str[$i];
  18.          } else {
  19.              $n = ord($str[$i]) - ord('A') + 10; // A=10, B=11, C=12...
  20.              $num = $num . $n;
  21.          }
  22.     }
  23.    
  24.     if (mod($num, 97) != 1){
  25.         return false;
  26.     }
  27.    
  28.     $str = substr($iban, 4) . substr($iban, 0, 4);
  29.     $str[20] = $str[21] = '0';
  30.     $num = "";
  31.     for ($i = 0; $i < strlen($str); $i++){
  32.          if (is_numeric($str[$i])){
  33.             $num = $num . $str[$i];
  34.          } else {
  35.              $n = ord($str[$i]) - ord('A') + 10; // A=10, B=11, C=12...
  36.              $num = $num . $n;
  37.          }
  38.     }
  39.    
  40.     $calculatedControl = 98 - mod($num, 97);
  41.     $realControl = intval($iban[2].$iban[3]);
  42.     if ($calculatedControl != $realControl){
  43.         return false;
  44.     }
  45.    
  46.     return true;
  47. }
  48.  
  49. function mod($num, $a){
  50.     // Initialize result
  51.     $res = 0;
  52.  
  53.     // One by one process
  54.     // all digits of 'num'
  55.     for ($i = 0; $i < strlen($num); $i++){
  56.         $res = ($res * 10 + $num[$i] - '0') % $a;
  57.     }
  58.  
  59.     return $res;
  60. }
  61.  
  62. ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement