Jak sprawdzić czy numer ewidencyjny PESEL został wpisany poprawnie.doc

(28 KB) Pobierz
[PHP] Jak sprawdzić czy numer ewidencyjny PESEL został wpisany poprawnie

[PHP] Jak sprawdzić czy numer ewidencyjny PESEL został wpisany poprawnie?

Problem

Chcesz sprawdzić czy użytkownik podał prawidłowy numer PESEL i nie popełnił w nim błędu.

Rozwiązanie

Nie można sprawdzić czy podany PESEL istnieje i korzysta z niego jakaś osoba. Można jednak łatwo sprawdzić czy cyfry w numerze zostały wpisane poprawnie i użytkownik nie popełnił podczas wpisywania błędu. Ma to kluczowe znaczenie gdy w formularzu internetowym klient podaje swój numer PESEL.

Numer ewidencyjny składa się z 11 cyfr, z których ostatnia zawiera cyfrę kontrolną. Aby sprawdzić czy numer został poprawnie wpisany, należy go przemnożyć przez odpowiednie wagi i całość podzielić modulo. Zobacz jak przeprowadzić wszystkie operacje krok po kroku.

Weźmy przykładowy numer PESEL:

12345678903

Każdą cyfrę (oprócz ostatniej) należy teraz przemnożyć przez odpowiednią wagę, które wynoszą po kolei: 1, 3, 7, 9, 1, 3, 7, 9, 1, 3, a uzyskane wyniki dodać do siebie. Wygląda to mniej więcej tak: 1*1 + 2*3 + 3*7 + 4*9 + itd... = 217.

Otrzymany wynik należy podzielić modulo 10 i odjąć od 10. Modulo to całkowita reszta z dzielenia przez 10. Suma kontrolna wynosi więc: 10 - 217 mod 10 = 3. Jeżeli otrzymana liczba jest równa 10, wtedy cyfra kontrolna wynosi 0.

Faktycznie - ostatnia cyfra w numerze PESEL wynosi 3, co oznacza, że wpisany numer jest poprawny i nie została zrobiona literówka lub nie pomyliliśmy liczb. Teraz zapiszmy to samo w postaci skryptu PHP:

<?

function pesel($pesel) {

  $pesel=preg_replace("/[^0-9]/","",$pesel);

  if (strlen($pesel)<>11) return 0;

  $wagi = array(1,3,7,9,1,3,7,9,1,3);

  for ($i=0; $i<10;$i++) $suma += $pesel[$i]*$wagi[$i];

  $liczba = 10 - $suma%10;

  if ($liczba==10) $liczba=0;

  if ($pesel[10]==$liczba) return 1;

  return 0;

}

 

$numer="12345678903";

 

if (pesel($numer)) echo "PESEL poprawny";

else echo "PESEL błędny";

?>

Do funkcji pesel() przekazujemy numer, który może być zapisany ze spacjami lub łącznikami albo jednym ciągiem. Wyrażenie regularne zostawi w zmiennej $pesel tylko same cyfry. Powinno ich być 11.

Następnie sumujemy 10 pierwszych cyfr mnożąc je przez wagi i wykonujemy dzielenie modulo oraz odjęcie reszty od dziesięciu. Jeżeli wynik wyszedł 10, wtedy liczba kontrolna będzie równa 0.

Pozostało tylko porównać czy cyfra z wyniku odpowiada ostatniej cyfrze z numeru ewidencyjnego. Jeżeli tak, można zwrócić 1, co sprawi, że warunek będzie prawdziwy i potwierdzi poprawnie wpisany PESEL.

 

...
Zgłoś jeśli naruszono regulamin