Skip to content

Instantly share code, notes, and snippets.

@artpi
Last active May 17, 2023 19:07
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save artpi/05cfdd87e31127171a54186d841ce648 to your computer and use it in GitHub Desktop.
Save artpi/05cfdd87e31127171a54186d841ce648 to your computer and use it in GitHub Desktop.
// 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;
}
@radzisz
Copy link

radzisz commented May 17, 2023

maly blad sie tam przydarzył dla ludzi urodzinych w styczniu
np pesel 06210311097

linia 7 var miesiac = parseInt(pesel.substring(2, 4), 10) - 1;
powina wygladac: var miesiac = parseInt(pesel.substring(2, 4), 10)

a liinia 30 urodzony.setFullYear(rok, miesiac, dzien);
tak: urodzony.setFullYear(rok, miesiac -1, dzien);

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment