Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Rozpoznanie nazwy banku po numerze konta?
Forum PHP.pl > Forum > Gotowe rozwiązania > Szukam
Malinaa
Witam,

Czy ktoś wie skąd wziąć skrypt php, który rozpozna nazwę banku po numerze konta?

Proszę o info
Pozdrawiam
DarekWapinski
Cześć,

zapiąłem to w prostą klasę bo potrzbowałem na już. Oczywiście można ją rozbudować o wiele ale do moich celów mi wystarcza.
Kody rozliczeniowe wziąłem z NBP: http://www.nbp.pl/home.aspx?f=/banki_w_pol.../ewidencja.html
Po odpowiednim przewormatowaniu pliku http://www.nbp.pl/banki_w_polsce/ewidencja/dz_bank_jorg.txt można
tablicę zrobić trochę inaczej niż poniżej, dodając np nr telefonu, adres banku itp. Ale to już onanizm intelektualny.
Trochę na kolanie więc bądżcie łaskawi za styl :-) Nr rachunku jest prawdziwy, prześlijcie coś na piwko za poświęcony czas :-)

  1. <?php
  2.  
  3. /**
  4.  * Klasa walidacji nr rachunku bankowego wg NRB
  5.  * autor: Darek Wapiński darek@wapinski.us 2014
  6.  *
  7.  * Jak używać:
  8.  *
  9.  * <?php
  10.  *
  11.  * // nr konta w konstruktorze mozemy podac w dowolnym formatowaniu
  12.  * // spacje zostaną usuniete
  13.  *
  14.  * header("Content-type: text/plain");
  15.  * $nrb = new NRB("37114020040000310242321556");
  16.  *
  17.  * if ($nrb->poprawny()) {
  18.  * echo $nrb->formatuj();
  19.  * echo "\n";
  20.  * echo $nrb->dekodujNazwe();
  21.  * } else {
  22.  * echo "\n$nrb->blad: ".$nrb->formatuj();
  23.  * }
  24.  * ?>
  25.  *
  26.  * wynik:
  27.  *
  28.  * 37 1140 2004 0000 3102 4232 1556
  29.   * mBank SA - O. Bankowości Detalicznej
  30.  *
  31.  * jak widać powyżej, nr rachunku zostanie odpowiedni sformatowany
  32.  */
  33.  
  34. class NRB {
  35. public $numerRachunku;
  36. public $numerRachunkuSformatowany;
  37. public $nazwaBanku;
  38. public $status;
  39. public $blad;
  40.  
  41. /**
  42.   * __construct($string)
  43.   * Kontruktor klasy
  44.   * Funkcja pobiera nr rachunku i usuwa zbędne znaki z numeru
  45.   * @param string $nrRachunku
  46.   */
  47.  
  48. function __construct ($nrRachunku) {
  49. if (!isset($nrRachunku) || empty($nrRachunku)) {
  50. echo "Brak nr rachunku przy inicjalizacji klasy: ".__CLASS__;
  51. } else {
  52. $this->numerRachunku = $nrRachunku;
  53. /* usuwamy zbędne znaki */
  54. $puste = array(' ', '-', '_', '.', ',','/', '|');
  55. /* pozostawiamy wielkie litery i cyfry */
  56. $temp = strtoupper(str_replace($puste, '', $this->numerRachunku));
  57. /* Jeżeli na początku są cyfry, to dopisujemy PL, inne kraje muszą być jawnie wprowadzone
  58.   if (($temp{0} <= '9') && ($temp{1}<='9')) {
  59.   $this->numerRachunku = 'PL'.$temp;
  60.   }
  61.   - pomijam, do późniejszego rozwoju funkcji */
  62. $this->numerRachunku = $temp;
  63. $this->blad = "";
  64. }
  65. }
  66.  
  67. /**
  68.   * formatuj()
  69.   * Funkcja formatuje string z numerek konta do postaci:
  70.   * ## #### #### #### #### #### ####
  71.   * @return string
  72.   */
  73.  
  74. public function formatuj() {
  75. $suma = substr ($this->numerRachunku, 0, 2 ); // 2 cyfry
  76. $nr_roz1 = substr ($this->numerRachunku, 2, 4 ); // pierwsze 4 cyfry
  77. $nr_roz2 = substr ($this->numerRachunku, 6, 4 ); // drugie 4 cyfry
  78. $nr_rach1 = substr ($this->numerRachunku, 10, 4 ); // pierwsze 4 cyfry
  79. $nr_rach2 = substr ($this->numerRachunku, 14, 4 ); // drugie 4 cyfry
  80. $nr_rach3 = substr ($this->numerRachunku, 18, 4 ); // trzecie 4 cyfry
  81. $nr_rach4 = substr ($this->numerRachunku, 22, 4 ); // czwarte 4 cyfry
  82. $this->numerRachunkuSformatowany = $suma.' '.$nr_roz1.' '.$nr_roz2.' '.$nr_rach1.' '.$nr_rach2.' '.$nr_rach3.' '.$nr_rach4;
  83. return $this->numerRachunkuSformatowany;
  84. }
  85.  
  86. public function poprawny()
  87. {
  88. /* usuwamy zbędne znaki */
  89. $puste = array(' ', '-', '_', '.', ',','/', '|');
  90. $iNRB = strtoupper(str_replace($puste, '', $this->numerRachunku));
  91. // Sprawdzenie czy przekazany numer zawiera 26 znaków
  92. if(strlen($iNRB) != 26) {
  93. $i = strlen($this->numerRachunku);
  94. $this->blad = "Rachunek nie zawiera 26 cyfr: $nrb->numerRachunku (zawiera $i cyfr)";
  95. return false;
  96. }
  97. // Zdefiniowanie tablicy z wagami poszczególnych cyfr
  98. $aWagiCyfr = array(1, 10, 3, 30, 9, 90, 27, 76, 81, 34, 49, 5, 50, 15, 53, 45, 62, 38, 89, 17, 73, 51, 25, 56, 75, 71, 31, 19, 93, 57);
  99. // Dodanie kodu kraju (w tym przypadku dodajemy kod PL)
  100. $iNRB = $iNRB.'2521';
  101. $iNRB = substr($iNRB, 2).substr($iNRB, 0, 2);
  102. // Wyzerowanie zmiennej
  103. $iSumaCyfr = 0;
  104. // Pętla obliczająca sumę cyfr w numerze konta
  105. for ($i = 0; $i < 30; $i++) {
  106. $iSumaCyfr += $iNRB[29 - $i] * $aWagiCyfr[$i];
  107. }
  108. // Sprawdzenie czy modulo z sumy wag poszczegolnych cyfr jest rowne 1
  109. return ($iSumaCyfr % 97 == 1);
  110. }
  111.  
  112. public function dekodujNazwe()
  113. {
  114. /* tablica nr rozliczeniowy -> nazwa => ograniczylem sie do mBank i Millenium poniewaz dluższy kod nie wejdzie we wpisie. */
  115.  
  116.  
  117. $bank['11401977'] = 'mBank SA - II O. Korporacyjny Warszawa';
  118. $bank['11401980'] = 'mBank SA - XIX F. w Łodzi (O.Korporacyjny Łódź)';
  119. $bank['11401993'] = 'mBank SA - O. Korporacyjny Kalisz';
  120. $bank['11402004'] = 'mBank SA - O. Bankowości Detalicznej';
  121. $bank['11402017'] = 'mBank SA - O. Bankowości Detalicznej';
  122. $bank['11402020'] = 'mBank SA - O. Korporacyjny Kielce';
  123. $bank['11402059'] = 'mBank SA - F. Nr 3 (O. Bankowości Detalicznej)';
  124. $bank['11402062'] = 'mBank SA - III O. Korporacyjny Warszawa';
  125. $bank['11402075'] = 'mBank SA - O.Korporacyjny Nowy Sącz';
  126. $bank['11402088'] = 'mBank SA - O. Korporacyjny Toruń';
  127. $bank['11402091'] = 'mBank SA - O. Korporacyjny Wałbrzych';
  128. $bank['11402105'] = 'mBank SA - IV Oddział Korporacyjny Warszawa';
  129. $bank['11402118'] = 'mBank SA - O. Korporacyjny Koszalin';
  130. $bank['11402121'] = 'mBank SA - Oddział Bankowości Detalicznej';
  131. $bank['11420008'] = 'mBank SA - Oddział Bankowości Detalicznej';
  132. $bank['11600006'] = 'Bank Millennium SA - Centrala';
  133. $bank['11602202'] = 'Bank Millennium SA - Millennium - Centrum Rozliczeniowe';
  134.  
  135. /* .... tutaj kolejne banki */
  136.  
  137. /* mapowanie nr_rozliczeniowy -> nazwa */
  138. $nr_rozliczeniowy = substr($this->numerRachunku, 2, 8);
  139. $nazwa_banku = $bank[''.$nr_rozliczeniowy.''] !== NULL ? $bank[''.$nr_rozliczeniowy.''] : $this->blad = "Nie odnalazłem nazwy banku";
  140. $this->nazwaBanku = $nazwa_banku;
  141. return $this->nazwaBanku;
  142. }
  143.  
  144. }
  145.  
  146. header("Content-type: text/plain");
  147. $nrb = new NRB("37114020040000310242321556");
  148.  
  149. if ($nrb->poprawny()) {
  150. echo $nrb->formatuj();
  151. echo "\n";
  152. echo $nrb->dekodujNazwe();
  153. } else {
  154. echo "\n$nrb->blad: ".$nrb->formatuj();
  155. }
  156.  



korzystajcie dowolnie.

Darek Wapiński
darek@wapinski.us
Pyton_000
2 małe drobnostki (ale to juz ja się czepiam smile.gif

Formatowanie można np. tak:
  1. $nr = '65789465486598754324561547';
  2.  
  3. $nr2 = preg_replace('/(..)(....)(....)(....)(....)(....)(....)/', '\1 \2 \3 \4 \5 \6 \7', $nr);


A czyszczenie:
  1. $nr2 = preg_replace('/[^0-9]/', '', $nr);
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2024 Invision Power Services, Inc.