KategorieProgramowanieWeb Developer

[JavaScript] Jak sprawdzić poprawność numeru PESEL, pobrać datę urodzenia oraz płeć ?

Każdy z nas wykorzystuje w swojej pracy gotowe rozwiązania napisane przez innych programistów jest to w większości przypadków związane z powtarzalnością problemów. Najczęściej spotykamy się z takimi przypadkami, gdy mamy przeprowadzić walidację danych z formularzy. Po co bowiem mamy pisać funkcję sprawdzającą czy dane pole zawiera tylko liczby, czy numer konta jest poprawny, czy też numer pesel wpisany został prawidłowo.

Jako że algorytm na sprawdzanie numeru PESEL jest powszechnie znany i lubiany 😉 to zamieszczę jedynie funkcję bez zbędnego zagłębiania się w tajniki jej działania.

function rozkodujPesel(pesel)
{
    //pobranie daty
    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);

    if(miesiac >= 80)
    {
        rok += 1800;
        miesiac = miesiac - 80;
    }
    else if(miesiac >= 60)
    {
        rok += 2200;
        miesiac = miesiac - 60;
    }
    else if (miesiac >= 40)
    {
        rok += 2100;
        miesiac = miesiac-40;
    }
    else if (miesiac >= 20)
    {
        rok += 2000;
        miesiac = miesiac - 20;
    }
    else
    {
        rok += 1900;
    }

    var dataUrodzenia = new Date();
    dataUrodzenia.setFullYear(rok, miesiac, dzien);

    // Weryfikacja numery PESEL
    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 cyfraKontr = parseInt(pesel.substring(10,11),10);
    var poprawnosc = (suma === cyfraKontr);

    //określenie płci
    var plec = 'k';

    if(parseInt(pesel.substring(9,10),10) % 2 === 1)
    {
        plec = 'm';
    }

    return {
        valid: poprawnosc,
        sex: plec,
        date: dataUrodzenia
    };
}

Jeśli chcecie zobaczyć funkcję w akcji zapoznajcie się z DEMEM

4 przemyślenia nt. „[JavaScript] Jak sprawdzić poprawność numeru PESEL, pobrać datę urodzenia oraz płeć ?”

  1. Witam. Funkcja zawiera błąd. Przy wyodrębnianiu miesiąca z numeru, osoby urodzone w styczniu w i po roku 2000 (nr miesiąca 21), będą błędnie dekodowane bo ich miesiąc będzie wynosił 20 (przez tą korektę -1 w linijce nr 5) i nie załapie się na else if (miesiac > 20), przez co rok urodzenia wyjdzie 1900. Należy to skorygować zmieniając else if na miesiac >= 20.
    To samo będzie dotyczyć osób urodzonych w styczniu w kolejnych stuleciach, ale to już raczej nie będzie problemem 🙂

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.