Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Walidator nowego dowodu
Forum PHP.pl > Forum > Gotowe rozwiązania > Algorytmy, klasy, funkcje
k@zio
Szukałem czegoś do sprawdzania poprawności serii i numeru nowego dowodu, ale nigdzie nie ma. Może się komuś przyda.
Wiem, że to można by było ładniej zrobić, ale mi potrzebne było tylko sprawdzenie sumy kontrolnej.


  1. <?php
  2. function sprawdzDowod($dowod){
  3.  $dowod = strtoupper(trim($dowod));
  4.  $znaki = array (
  5.  '0' => '0', '1' => '1', '2' => '2', '3' => '3', '4' => '4', '5' => '5', '6' => '6', '7' => '7', '8' => '8', '9' => '9',
  6.  'A' => '10', 'B' => '11', 'C' => '12', 'D' => '13', 'E' => '14', 'F' => '15', 'G' => '16', 'H' => '17', 'I' => '18', 'J' => '19',
  7.  'K' => '20', 'L' => '21', 'M' => '22', 'N' => '23', 'O' => '24', 'P' => '25', 'Q' => '26', 'R' => '27', 'S' => '28', 'T' => '29',
  8.  'U' => '30', 'V' => '31', 'W' => '32', 'X' => '33', 'Y' => '34', 'Z' => '35');
  9. $suma = 7 * $znaki[$dowod[0]];
  10. $suma += 3 * $znaki[$dowod[1]];
  11. $suma += 1 * $znaki[$dowod[2]];
  12. $suma += 7 * $znaki[$dowod[4]];
  13. $suma += 3 * $znaki[$dowod[5]];
  14. $suma += 1 * $znaki[$dowod[6]];
  15. $suma += 7 * $znaki[$dowod[7]];
  16. $suma += 3 * $znaki[$dowod[8]];
  17. $suma %= 10;
  18. if (($dowod[3] == $suma) && (strlen($dowod) == 9)) {
  19.  return true;
  20. } else return false;
  21. } ;
  22. ?>
Spirit86
Ja bym proponował tak, sprawdzanie 9 znaków, bo po co coś sprawdzać, skoro podstawowa sprawa (9 znaków) nie jest spełniona smile.gif.

  1. <?php
  2. function sprawdzDowod($dowod){
  3. if(strlen($dowod)==9){
  4.  $dowod = strtoupper(trim($dowod));
  5.  $znaki = array (
  6.  '0' => '0', '1' => '1', '2' => '2', '3' => '3', '4' => '4', '5' => '5', '6' => '6', '7' => '7', '8' => '8', '9' => '9',
  7.  'A' => '10', 'B' => '11', 'C' => '12', 'D' => '13', 'E' => '14', 'F' => '15', 'G' => '16', 'H' => '17', 'I' => '18', 'J' => '19',
  8.  'K' => '20', 'L' => '21', 'M' => '22', 'N' => '23', 'O' => '24', 'P' => '25', 'Q' => '26', 'R' => '27', 'S' => '28', 'T' => '29',
  9.  'U' => '30', 'V' => '31', 'W' => '32', 'X' => '33', 'Y' => '34', 'Z' => '35');
  10. $suma = 7 * $znaki[$dowod[0]];
  11. $suma += 3 * $znaki[$dowod[1]];
  12. $suma += 1 * $znaki[$dowod[2]];
  13. $suma += 7 * $znaki[$dowod[4]];
  14. $suma += 3 * $znaki[$dowod[5]];
  15. $suma += 1 * $znaki[$dowod[6]];
  16. $suma += 7 * $znaki[$dowod[7]];
  17. $suma += 3 * $znaki[$dowod[8]];
  18. $suma %= 10;
  19. return ($dowod[3] == $suma);
  20. }
  21. else return false;
  22. } ;
  23. ?>
k@zio
Można by i dodać sprawdzanie czy pierwsze trzy znaki to litery i czy reszta to liczby, ale mi zależało tylko na sumie smile.gif
nospor
jak piszesz skrypty to wlącz sobie raportowanie wszystkich bledow. Przeciez teraz jak dasz za malo znakow w sprawdzanym dowodzie to poleci ci masa NOTICE'ów

Oczywiscie poprawka Spirit załatwi sprawe. Jak juz dawac cos do dzialu algorytmy,klasy,funkcje to niech to bedzie porządne.
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-2025 Invision Power Services, Inc.