In this essay
Jeśli pracujecie z systemem lub portalem w którym wprowadza się dane osobowe, prawdopodobnie będziecie także mieli do wprowadzenia Pesel.
Pesel jest dość magicznym numerem, który (jeśli programista umie dodać 2 do dwóch) pozwala na spore ułatwienia dla użytkownika. W przypadku rozwiązań WEB’owych nic nie stoi na przeszkodzie, by numer pesel walidować w Javascripcie.
Informacje, jakie możemy z Peselu wyciągnąć ‘ot tak’ to:
- Data urodzenia
- Płeć
- Informacja, czy pesel został wpisany bez błędów.
Jak zatem zdobyć te wszystkie informacje? Poniżej gotowa funkcja JavaScript:
Sprawdź działanie sam:
| Sprawdź! | |
| Poprawny: | |
| Poprawny2: | |
| Płeć: | |
| Data urodzenia: |
| // https://piszek.com/2013/03/13/walidacja-numeru-pesel-w-javascript/ | |
| // Funkcja dekodujaca nr. Pesel | |
| function peselDecode(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); | |
| // Pesel został wprowadzony w 20 wieku, ale zawiera modyfikatory na przysłość | |
| // Miesiąc zawiera dodatkowe liczby dla dat z przyszłości. | |
| 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; | |
| } | |
| if( miesiac >=0 && miesiac < 12 && dzien > 0 && dzien < 32 ) { | |
| // Daty sa ok. Teraz ustawiamy. | |
| var urodzony = new Date(); | |
| urodzony.setFullYear(rok, miesiac, dzien); | |
| } else { | |
| var urodzony = false; | |
| } | |
| //plec | |
| var plec; | |
| if (parseInt(pesel.substring(9, 10), 10) % 2 === 1) { | |
| plec = 'm'; | |
| } else { | |
| plec = 'k'; | |
| } | |
| return { | |
| sex: plec, | |
| date: urodzony, | |
| }; | |
| } | |
| // Metoda weryfikacji na podstawie przypisanych wag. | |
| function checkPeselWithWeights( 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; | |
| return (suma === parseInt(pesel.substring(10, 11), 10)); | |
| } | |
| // Metoda weryfikacji za pomocą sumy kontrolnej | |
| function checkPeselWithControlSum(pesel) { | |
| var tabnr = '1379137913'; | |
| var suma = 0; | |
| var result = false; | |
| if (pesel.length == 11) { | |
| for (var i = 0; i < tabnr.length; i++) { | |
| suma = suma + parseInt(tabnr.charAt(i), 10) * parseInt(pesel.charAt(i), 10); | |
| } | |
| var modu = suma % 10; | |
| if (modu == 0) | |
| result = (0 == parseInt(pesel.charAt(10), 10)); | |
| else | |
| result = ((10 - modu) == parseInt(pesel.charAt(10), 10)); | |
| } else { | |
| return false; | |
| } | |
| return result; | |
| } |
Struktura numeru pesel
Struktura numeru pesel jest następująca:
DDDDDDSSSPK
Gdzie
- D - Data. W powszechnym mniemaniu Są to dwie ostatnie cyfry roku, miesiąc dzień. I jest to prawda, ale nie cała prawda. Wielokrotnie spotykałem się z obawami programistów, iż nie ma jak przypisać numeru pesel osobom urodzonym po 2000 roku. Nie ma obawy - system nie jest aż tak dziurawy :). W specyfikacji numeru pesel jest tak, że do miesiąca jest dodawana konkretna liczba wskazująca stulecie urodzenia.
- dla lat 1800-1899 - 80
- dla lat 2000-2099 - 20
- dla lat 2100-2199 - 40
- dla lat 2200-2299 - 60
- S - cyfry reprezentujące numer serii
- P - Płeć. Parzysta dla kobiet, nieparzysta dla mężczyzn.
- K - cyfra kontrolna. O algorytmie tworzenia cyfry kontrolnej napisano wiele, dlatego pozwolę sobie tutaj dokładnych kroków nie przytaczać.


Leave a Reply