[PHP] Jak sprawdzić czy numer ewidencyjny PESEL został wpisany poprawnie?
Chcesz sprawdzić czy użytkownik podał prawidłowy numer PESEL i nie popełnił w nim błędu.
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.