Funkcja dekodująca numer pesel
http://artpi.pl/?p=8
by Artur Piszek
HTML
<table border=1>
<tr><td><label for='pesel'>Wpisz numer pesel:</label></td>
<td><input type='text' id='pesel'><a href="#" id="button">Sprawdź!</A></td></tr>
<tr><td><b>Poprawny:</b></td><td id='poprawny'></td></tr>
<tr><td><b>Płeć:</b></td><td id='plec'></td></tr>
<tr><td><b>Data urodzenia:</b></td><td id='data'></td></tr>
</table>
JavaScript
function PeselDecode(pesel)
{
// http://artpi.pl/?p=8
// Funkcja dekodujaca nr. Pesel
// Wycinamy daty z numeru
var rok=parseInt(pesel.substring(0,2),10);
var miesiac = parseInt(pesel.substring(2,4),10)-1;
var dzien = parseInt(pesel.substring(4,6),10);
// Powszechnie uwaza sie, iz daty w numerach pesel obejmuja tylko ludzi urodzonych do 2000 roku. Na szczescie prawodawcy o tym pomysleli i do miesiaca dodawane sa liczby tak, by pesele starczyly az do 23 wieku.
if(miesiac>80) {
rok = rok + 1800;
miesiac = miesiac - 80;
}
else if(miesiac > 60) {
rok = rok + 2200;
miesiac = miesiac - 60;
}
else if (miesiac > 40) {
rok = rok + 2100;
miesiac = miesiac - 40;
}
else if (miesiac > 20) {
rok = rok + 2000;
miesiac = miesiac - 20;
}
else
{
rok += 1900;
}
// Daty sa ok. Teraz ustawiamy.
var urodzony=new Date();
urodzony.setFullYear(rok, miesiac, dzien);
// Teraz zweryfikujemy numer pesel
// Metoda z wagami jest w sumie najszybsza do weryfikacji.
var wagi = [9,7,3,1,9,7,3,1,9,7];
var suma = 0;
for(var i=0;i<wagi.length;i++) {
suma+=(parseInt(pesel.substring(i,i+1),10) * wagi[i]);
}
suma=suma % 10;
var valid=(suma===parseInt(pesel.substring(10,11),10));
//plec
if(parseInt(pesel.substring(9,10),10) % 2 === 1) {
var plec='m';
} else {
var plec='k';
}
return {valid:valid,sex:plec,date:urodzony};
}
//Ponizszy kod doczepia tylko do testow.
$("#button").on('click',function(e) {
var numer=$("#pesel").val();
var wynik=PeselDecode(numer);
if(!wynik.valid)
alert("Niepoprawny!");
$("#poprawny").text(wynik.valid);
$("#plec").text(wynik.sex);
$("#data").text(wynik.date);
e.preventDefault();
return false;
});