Cytat(brachu @ 2005-06-16 06:34:31)
Z numerem PESEL czy nr dowodu jest maly problem - kiepsko z weryfikacja!!! mozna wymyslac numery... ja bym raczej stawial na maila zreszta tak chyba jest w wiekszosci portali, identyfikacja po @...
Nie wiem czy wiecie, ale PESEL to nie jest jakis tam dowolny ciag cyfr.
Cytat
Poprawnośc numeru PESEL
Numery PESEL nadają gminy na mocy Art.46 ustawy z dnia 10. kwietnia 1984 o ewidencji ludności i dowodach osobistych.
PESEL jest to 11-cyfrowy, stały symbol numeryczny, identyfikujący jednoznacznie określoną osobę fizyczną. PESEL zbudowany jest z następujących elementów:
data urodzenia
płeć
liczba porządkowa
cyfra kontrolna
Data urodzenia zapisana jest w następującym porządku: dwie ostatnie cyfry roku, miesiąc i dzień. Dla rozróżnienia stuleci przyjęto metodę kodowania:
dla lat 1900-1999 miesiąc zapisywany jest w sposób naturalny
dla lat 1800-1899 do numeru miesiąca dodawana jest liczba 80
dla lat 2000- 2099 do numeru miesiąca dodawana jest liczba 20
dla lat 2100- 2199 do numeru miesiąca dodawana jest liczba 40
dla lat 2200- 2299 do numeru miesiąca dodawana jest liczba 60
Powyższa metoda pozwala na rozróżnienie 5 stuleci.
Informacja dotycząca płci osoby zawarta jest na 10 pozycji numeru PESEL:
cyfry 0, 2, 4, 6, 8 - płeć żeńska
cyfry 1, 3, 5, 7, 9 - płeć męska
Cyfra kontrolna
Ostatnia cyfra numeru PESEL ma charakter kontrolny... Każdej pozycji numeru PESEL nadany został odpowiedni współczynnik - waga pozycji. Algorytm kontrolny numeru PESEL jest następujący: każdą cyfrę numeru mnoży się przez jego wagę i sumuje wyniki mnożenia. Otrzymany wynik dzielimy modulo 10 i odejmujemy od 10 (dla wyniku 10 cyfra kontorlna przyjmuje wartość 0). Cyfry numeru PESEL X X X X X X X X X X
Wagi 1 3 7 9 1 3 7 9 1 3
Przykładowo na dumeru PESEL
49040501580
otrzymujemy:
suma = 1*4+3*9+7*0+9*4+1*0+3*5+7*0+9*1+1*5+3*8 = 120
120 mod 10 = 0
10-0=10
Zatem otrzymujemy cyfrę kontrolną 0 - numer PESEL jest poprawny. Poniższa funkcja sprawdza poprawnośc numeru PESEL:
<?
function vpesel($PESEL,$sex="?") {
if ($PESEL[9] % 2 and $sex=="K") return false;
else if (!$PESEL[9] % 2 and $sex!="M") return false;
$w=array(1,3,7,9);
for ($i=0;$i<=9;$i++)
$wk=($wk+$PESEL[$i]*$w[$i % 4]) % 10;
$k = (10-$wk) % 10;
if ($PESEL[10]==$k) return true;
else return false;
}
?>
Zatem funkcja:
bool(string pesel [,string sex])
zwraca true jeżeli nr PESEL jest poprawny, w przeciwnym wypadku false. Przykłady wywołań:
vpesel("74021834012") - jeżeli nie mamy informacji o płci
vpesel("74021834012","M"); - jeżeli wiemy, że to mężczyzna
vpesel("74021834012","K"); - jeżeli wiemy, że to kobieta