Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [skrypt php] Test IBAN, Funkcja sprawdzająca poprawność nr konta bankowego
Rzast
post 29.06.2006, 11:55:26
Post #1





Grupa: Zarejestrowani
Postów: 45
Pomógł: 0
Dołączył: 24.11.2005
Skąd: Podczerwone

Ostrzeżenie: (0%)
-----


na podstawie tej strony
Cytat
Weryfikacja składa się z następujących kroków:
krok wstępny : usuń niealfanumeryczne znaki - np. spacje, myślniki itd.
krok 1 : przesuń 4 pierwsze znaki na koniec,
krok 2 : zamień litery na dwucyfrowe liczby; A=10, B=11, ... Y=34, Z=35
krok 3 : podziel całkowicie liczbę z kroku 2 przez 97,
krok 4 : jeśli reszta z dzielenia wyniosła 1 to numer jest prawidłowy.

Jako, że nie znalazłem, to sam napisałem, ale mam prośbę do bardziej doświadczonych o optymalizację.
Funkcja na wejściu przyjmuje numer jako string, zwraca true jeśli numer prawidłowy, false jeśli nie.
Proszę różnież o przetestowanie (czy dziala)
  1. <?php
  2. function sprawdz_nr_konta($numer) {
  3. //(c) Bartłomiej Zastawnik, "Rzast".
  4. //Użycie funkcji dozwolone przy zachowaniu komentarzy.
  5. $puste = array(' ', '-', '_', '.', ',','/', '|');//znaki do usunięcia
  6. $temp = strtoupper(str_replace($puste, '', $numer));//Zostają cyferki + duże litery
  7. if (($temp{0}<='9')&&($temp{1}<='9')){//Jeżeli na początku są cyfry, to dopisujemy PL
  8. $temp ='PL'.$temp;
  9. }
  10. $temp=substr($temp,4).substr($temp, 0, 4);//przesuwanie cyfr kontrolnych na koniec
  11. $znaki=array('0'=>'0','1'=>'1','2'=>'2','3'=>'3','4'=>'4',
  12.  '5'=>'5','6'=>'6','7'=>'7','8'=>'8','9'=>'9',
  13. 'A'=>'10','B'=>'11','C'=>'12','D'=>'13','E'=>'14','F'=>'15',
  14. 'G'=>'16','H'=>'17','I'=>'18','J'=>'19','K'=>'20',
  15. 'L'=>'21','M'=>'22','N'=>'23','O'=>'24','P'=>'25',
  16. 'Q'=>'26','R'=>'27','S'=>'28','T'=>'29','U'=>'30',
  17. 'V'=>'31','W'=>'32','X'=>'33','Y'=>'34','Z'=>'35');//Tablica zamienników
  18. $ilosc=strlen($temp);//długość numeru
  19. $ciag='';
  20. for ($i=0;$i<$ilosc;$i++){
  21. $ciag.=$znaki[$temp{$i}];
  22. }
  23. $mod = 0;
  24. $ilosc=strlen($ciag);//nowa długość numeru
  25. for($i=0;$i<$ilosc;$i=$i+6) {
  26. //oblicznie modulo, $ciag jest zbyt wielką liczbą na format integer, więc dzielę g
    o na kawałki
  27. $mod = (int)($mod.substr($ciag, $i, 6)) % 97; 
  28. }
  29.  $out=($mod==1)?true:false;
  30. return $out;
  31. }
  32. ?>


Ten post edytował Rzast 30.06.2006, 09:53:21


--------------------
Podhale naprawa komputerów, strony WWW
Go to the top of the page
+Quote Post
kwiateusz
post 30.06.2006, 00:34:04
Post #2


Admin Techniczny


Grupa: Administratorzy
Postów: 2 071
Pomógł: 93
Dołączył: 5.07.2005
Skąd: Olsztyn




Na moim koncie w bzwbk działa tzn. wskazuje żen umer jest poprawny winksmiley.jpg

Całkiem ciekawy skrypcik winksmiley.jpg
Go to the top of the page
+Quote Post
Rzast
post 30.06.2006, 10:19:11
Post #3





Grupa: Zarejestrowani
Postów: 45
Pomógł: 0
Dołączył: 24.11.2005
Skąd: Podczerwone

Ostrzeżenie: (0%)
-----


W przyszłości planuję coś takiego:

sprawdz_pole($rodzaj,$do_strawdzenia)
{}

czyli funkcja testująca zmienne (najczęściej $_POST) co do prawidłowych wartości.
Na razie mam (rodzaje):
Konto bankowe;
Nip;
Pesel;
Regon;
email, (banał)
liczbę integer (j.w)
kod pocztowy - ale bez sprawdzenia, czy prawdziwy...


--------------------
Podhale naprawa komputerów, strony WWW
Go to the top of the page
+Quote Post
tiraeth
post 4.07.2006, 16:16:04
Post #4





Grupa: Przyjaciele php.pl
Postów: 1 789
Pomógł: 41
Dołączył: 30.10.2003
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


Do tych kodów pocztowych: http://www.poczta-polska.pl/kody.php
Go to the top of the page
+Quote Post
SongoQ
post 4.07.2006, 18:40:48
Post #5





Grupa: Przyjaciele php.pl
Postów: 2 923
Pomógł: 9
Dołączył: 25.10.2004
Skąd: Rzeszów - studia / Warszawa - praca

Ostrzeżenie: (0%)
-----


Na wiki takie cos w tamtym roku opublikowalem, chyba tez byla wersja z generowaniem numeru konta dla osob ktore maja umowe z bankiem na platnosci masowe.


--------------------
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 29.04.2025 - 13:42