Przejdź do głównej zawartości

PESEL

PESEL (Powszechny Elektroniczny System Ewidencji Ludności) to powszechny 11-cyfrowy numer identyfikacyjny obywatela Polski. Koduje datę urodzenia, stulecie urodzenia, płeć i porządkowy numer seryjny posiadacza.

import { Numerik } from '@slashlab/numerik-js'
// Szybkie sprawdzenie
Numerik.pesel().isValid('92060512186') // true
// Pełny obiekt z danymi
const result = Numerik.pesel().validate('92060512186')
result.isValid // true
// Parsowanie do obiektu z danymi
const pesel = Numerik.pesel().parse('92060512186')
// Null zamiast wyjątku w przypadku błędu
const maybe = Numerik.pesel().tryParse('bad-input') // null

parse() i tryParse() zwracają instancję Pesel.

MetodaTyp zwracanyOpis
getRaw()stringOryginalne dane wejściowe, bez zmian.
getNormalized()stringCyfry bez białych znaków.
toString()stringAlias dla getNormalized().
MetodaTyp zwracanyOpis
getBirthDate()DateData urodzenia zdekodowana z PESEL. Zwraca nowy obiekt Date, niepowiązany z oryginałem.
getGender()GenderGender.Male lub Gender.Female.
getOrdinalNumber()number4-cyfrowy porządkowy numer seryjny (cyfry 7–10). Ostatnia cyfra koduje też płeć: nieparzysta = mężczyzna, parzysta = kobieta.
getCentury()numberStulecie urodzenia jako rok bazowy, np. 1900, 2000, 2100.
MetodaTyp zwracanyOpis
isMale()booleantrue gdy płeć to Gender.Male.
isFemale()booleantrue gdy płeć to Gender.Female.
getAge()numberPełne lata od daty urodzenia do dziś.
isAdult()booleantrue gdy getAge() >= 18.
import { Numerik, Gender } from '@slashlab/numerik-js'
const pesel = Numerik.pesel().parse('92060512186')
pesel.getRaw() // '92060512186'
pesel.getNormalized() // '92060512186'
pesel.getBirthDate() // Date — 1992-06-05
pesel.getGender() // Gender.Female
pesel.isFemale() // true
pesel.getOrdinalNumber() // 1218 (cyfry 7–10)
pesel.getCentury() // 1900
pesel.getAge() // obliczane na bieżąco
pesel.isAdult() // true

Cyfry miesiąca w numerze PESEL kodują zarówno rzeczywisty miesiąc, jak i stulecie urodzenia:

Zakres zapisanego miesiącaRzeczywisty miesiącStulecie urodzenia
01–1201–121900–1999
21–3201–122000–2099
41–5201–122100–2199
61–7201–122200–2299
81–9201–121800–1899
PowódWartośćWarunek
InvalidLengthinvalid_lengthDane wejściowe nie mają dokładnie 11 cyfr po normalizacji.
InvalidCharactersinvalid_charactersPo usunięciu białych znaków pozostają znaki inne niż cyfry.
InvalidMonthinvalid_monthKodowanie miesiąca nie pasuje do żadnego ze znanych zakresów stulecia.
InvalidDateinvalid_dateZdekodowana data nie jest prawdziwą datą kalendarzową.
FutureDatefuture_dateZdekodowana data urodzenia jest w przyszłości (tylko tryb ścisły).
InvalidChecksuminvalid_checksumCyfra kontrolna nie zgadza się z obliczoną wartością.
AllSameDigitall_same_digitWszystkie 11 cyfr jest identycznych (tylko tryb ścisły).

Wagi: 1, 3, 7, 9, 1, 3, 7, 9, 1, 3

  1. Odrzuć dane wejściowe dłuższe niż 32 znaki. Usuń białe znaki. Sprawdź, czy pozostało dokładnie 11 cyfr.
  2. Zdekoduj datę urodzenia używając tabeli kodowania stulecia powyżej. Sprawdź, czy data jest prawdziwą datą kalendarzową. W trybie ścisłym odrzuć też daty urodzenia w przyszłości.
  3. Oblicz sumę kontrolną: pomnóż każdą z pierwszych 10 cyfr przez odpowiednią wagę, zsumuj iloczyny, oblicz mod 10, odejmij od 10, oblicz mod 10 ponownie. Wynik musi być równy cyfrze 11.
  4. W trybie ścisłym odrzuć dane wejściowe, w których wszystkie 11 cyfr jest identycznych.

Pełna dokumentacja w sekcji Algorytmy.