Jak sprawdzić czy numer ewidencyjny PESEL został wpisany poprawnie


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

0x01 graphic

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

0x01 graphic

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.



Wyszukiwarka

Podobne podstrony:
Jak sprawdzić czy numer rachunku bankowego (NRB) został wpisany poprawnie, PHP Skrypty
Jak sprawdzic czy pracodawca od Nieznany
Jak sprawdzić czy istnieje podany użytkownik i jego hasło jest poprawne, PHP Skrypty
Jak sprawdzić czy domena istnieje i do kogo należy, PHP Skrypty
Jak sprawdzić czy w bazie danych istnieje aktualnie dodawana treść, PHP Skrypty
Jak sprawdzić czy zmienna przechowuje liczbę całkowitą lub rzeczywistą, PHP Skrypty
Jak sprawdzić czy pracodawca odprowadza składki ZUS
Jak sprawdzić czy dwa wyrazy są dla siebie anagramami (są permutacją, PHP Skrypty
Jak sprawdzić czy nasz komputer nie jest zainfekowany(1)
Jak sprawdzić, czy RAM działa prawidłowo
Jak sprawdzic czy wykonawca dysponuje osobami zdolnymi do realizacji zamowienia
jak sprawdzic czy zdjecie ma 10x15
Jak sprawdzić czy opony mają właściwe ciśnienie
Jak sprawdzić typ systemu Windows (32 czy 64 bitowy) (Windows 7 i Windows Vista)
Jak sprawdzić w pliku tekstowym czy istnieje podany użytkownik i czy jego hasło jest poprawne
jak sprawdzic karte graficzna czy jest sprawna
Jak sprawdzić ilość pamięci RAM (Windows 7 i Windows Vista)

więcej podobnych podstron