[PHP] Generowanie nr. dowodu osobistego
Wrzucam, bo może komuś się przyda - potrzebowałem generatora nr. dowodu osobistego do testowania aplikacji, która nie dość, że sprawdza poprawność to jeszcze nie pozwala na użycie tego samego numeru więcej niż raz. Kod PHP jest portem kodu Java z blogu Not All About Java.
function generateDO(){
$seria = $numer = "";
$suma=0;
$waga = array(7,3,1,7,3);
for($i=0;$i<3;$i++){
$seria .= chr(rand(0, (ord('Z') - ord('A'))) + ord('A'));
$suma += $waga[$i] * (ord(substr($seria, $i, 1)) - ord('A') + 10);
}
for($i=0;$i<5;$i++){
$numer .= chr(rand(0, ord('9') - ord('0')) + ord('0'));
$suma += $waga[$i] * (ord(substr($numer, $i, 1)) - ord('0'));
}
return $seria . ($suma%10) . $numer;
}
Komentarze
Komentarz użytkownika Wasacz
12 05 2010$serua
Komentarz użytkownika BTM
12 05 2010Dzięki, poprawione.
Komentarz użytkownika goshki
14 05 2010(Komentarz zmodyfikowany 14.05.2010 o 10:32)
To ja dorzucę jeszcze bookmarklet generujący PESEL'e:
Sprawdzony pod firefoxem, działa bezpośrednio z paska adresu.
Komentarz użytkownika Romek
09 08 2010może by skrócić trochę ten kod bo w pętli for takie wyrażenia jak
(ord('Z') - ord('A')) albo ord('A')
się dość mało zmieniają :-) i co więcej w kodach ASCII są stałe.
Druga sprawa, że w literach serii nie używane są litera O (jak OLA)
i litera Q (jak QUAD) - literki Q jestem mniej pewien.
Trzecia sprawa to kolejność wydawania dowodów w danych seriach.
Do tej pory - połowa roku 2010 - wydawane są dowody osobiste serii zaczynającej się od liter AS*.
Sądząc po tempie wydawania nowych dowodów - obowiązek wymiany już był - teraz tylko ewentualne zagubione, zmienione i maturzyści - to seria A** się przez dwa lata nie skończy. Tak więc generator powinien nie generować - na razie przynajmniej - dowodów gdzie pierwszą literą jest litera inna niż A.
Przy okazji; jeśli ktoś ma dane z seriami DO (numer nie konieczny żeby nie naruszać prawa o danych osobowych) i datami wydania to byłbym wdzięczny. zylla (at) wipos.p.lodz.pl
Komentarz użytkownika xp
20 11 2010JAK tego używać
Komentarz użytkownika BTM
20 11 2010Któego? Skryptu PHP? Wstawić i wywołać.