Dzisiaj przedstawię prostą funkcję do walidacji numeru PESEL w PHP. Przyjmowany argument i zwracana wartość nie powinny być niespodzianką - bierzemy numer PESEL, a dostajemy wartość logiczną (prawda/fałsz).
Aby sprawdzić poprawność numeru PESEL, należy obliczyć jego tak zwaną cyfrę kontrolną.
Jest to ostatnia cyfra numeru PESEL, obliczana na podstawie jego wcześniejszych cyfr
i sprawdzana na podstawie wzoru (zakładamy, że a
- j
to kolejne cyfry PESEL-u
licząc od lewej):
a+3b+7c+9d+e+3f+7g+9h+i+3j+k
Teraz należy obliczyć resztę dzielenia powyższej sumy przez 10. Jeżeli ostatnia cyfra otrzymanego wyniku jest równa 0, to numer jest poprawny. W przeciwnym przypadku cyfra kontrolna nie zgadza się z resztą. Przykładowa implementacja w PHP, może wyglądać następująco:
function peselValidate($pesel)
{
$sum = 0;
$weights = array(1, 3, 7, 9, 1, 3, 7, 9, 1, 3, 1); // Wagi dla kolejnych cyfr numeru PESEL
foreach (str_split($pesel) as $position => $digit) {
$sum += $digit * $weights[$position];
}
return substr($sum % 10, -1, 1) == 0;
}
Należy jednak zwrócić uwagę na dwie rzeczy:
- poprawność cyfry kontrolnej nie gwarantuje, że dany numer PESEL istnieje - tylko tyle, że jest zgodny wymogami co do numeru. Faktyczne potwierdzenie istnienia danego numeru jest niemożliwe bez dostępu do ewidencji.
- w Polsce odnotowano przypadki wydania nieprawidłowych numerów PESEL
Aktualizacja (21.02.2015): aktualizacja kodu funkcji, reorganizacja treści
Komentarze wyłączone
Możliwość komentowania na blogu została wyłączona. Zapraszam do kontaktu na Twitterze, Facebooku lub poprzez formularz, o ten tutaj. Do usłyszenia!