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;
});