[PHP] Sprawdzanie poprawności numeru PESEL

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ć 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

5 komentarzy do “[PHP] Sprawdzanie poprawności numeru PESEL

  1. Soanvig pisze:

    Weź zrób box z codem na 90% szerokości i wyśrodkuj, myślę, że będzie lepiej wyglądał. Bo zajmuje ~60% a i tak obok niego nic nie ma, a trza przewijać na boki.

    • Sobak pisze:

      Aktualnie planuję kilka grubszych zmian na stronie i nie ukrywam, że nie chce mi się robić prowizorki na krótko. Obiecuję, że naprawię razem z resztą zmian :)

      • Nie no moim zdaniem możesz zrobić bo zanim Wyvern wyjdzie to troche czasu potrwa o i znalazłem nowego buga przy komentowaniu. O ileś px mi przeskoczyło w lewo całe te „okno” z komentarzami jak miałem długi komentarz w linii lol.

  2. Dobra jakiś czas temu poprawiłem Ci to z listingiem kodu o co postulował towarzysz @Soanvig.

    A co do kwestii peselu to polecam [PHP] Sprawdzenie poprawności numeru PESEL oraz wpis z nim powiązany.

    PS
    Sobak substr() to marny sposób, serio! Ja też nie lepszy bo wyjechałem z armatą na muchę ale co z tego. Mucha ma się dobrze bo lubi fruwać wokół narodowego stadionu :D Widzisz stary nie trzeba było mnie inspirować! Teraz masz nauczkę.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *