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 sprawdzenieNumerik.pesel().isValid('92060512186') // true
// Pełny obiekt z danymiconst result = Numerik.pesel().validate('92060512186')result.isValid // true
// Parsowanie do obiektu z danymiconst pesel = Numerik.pesel().parse('92060512186')
// Null zamiast wyjątku w przypadku błęduconst maybe = Numerik.pesel().tryParse('bad-input') // nullMetody zwracanego obiektu
Dział zatytułowany „Metody zwracanego obiektu”parse() i tryParse() zwracają instancję Pesel.
Podstawowe
Dział zatytułowany „Podstawowe”| Metoda | Typ zwracany | Opis |
|---|---|---|
getRaw() | string | Oryginalne dane wejściowe, bez zmian. |
getNormalized() | string | Cyfry bez białych znaków. |
toString() | string | Alias dla getNormalized(). |
Zwracające dane
Dział zatytułowany „Zwracające dane”| Metoda | Typ zwracany | Opis |
|---|---|---|
getBirthDate() | Date | Data urodzenia zdekodowana z PESEL. Zwraca nowy obiekt Date, niepowiązany z oryginałem. |
getGender() | Gender | Gender.Male lub Gender.Female. |
getOrdinalNumber() | number | 4-cyfrowy porządkowy numer seryjny (cyfry 7–10). Ostatnia cyfra koduje też płeć: nieparzysta = mężczyzna, parzysta = kobieta. |
getCentury() | number | Stulecie urodzenia jako rok bazowy, np. 1900, 2000, 2100. |
Sprawdzające
Dział zatytułowany „Sprawdzające”| Metoda | Typ zwracany | Opis |
|---|---|---|
isMale() | boolean | true gdy płeć to Gender.Male. |
isFemale() | boolean | true gdy płeć to Gender.Female. |
getAge() | number | Pełne lata od daty urodzenia do dziś. |
isAdult() | boolean | true gdy getAge() >= 18. |
Przykłady
Dział zatytułowany „Przykłady”import { Numerik, Gender } from '@slashlab/numerik-js'
const pesel = Numerik.pesel().parse('92060512186')
pesel.getRaw() // '92060512186'pesel.getNormalized() // '92060512186'pesel.getBirthDate() // Date — 1992-06-05pesel.getGender() // Gender.Femalepesel.isFemale() // truepesel.getOrdinalNumber() // 1218 (cyfry 7–10)pesel.getCentury() // 1900pesel.getAge() // obliczane na bieżącopesel.isAdult() // trueKodowanie stulecia
Dział zatytułowany „Kodowanie stulecia”Cyfry miesiąca w numerze PESEL kodują zarówno rzeczywisty miesiąc, jak i stulecie urodzenia:
| Zakres zapisanego miesiąca | Rzeczywisty miesiąc | Stulecie urodzenia |
|---|---|---|
| 01–12 | 01–12 | 1900–1999 |
| 21–32 | 01–12 | 2000–2099 |
| 41–52 | 01–12 | 2100–2199 |
| 61–72 | 01–12 | 2200–2299 |
| 81–92 | 01–12 | 1800–1899 |
Powody błędów
Dział zatytułowany „Powody błędów”| Powód | Wartość | Warunek |
|---|---|---|
InvalidLength | invalid_length | Dane wejściowe nie mają dokładnie 11 cyfr po normalizacji. |
InvalidCharacters | invalid_characters | Po usunięciu białych znaków pozostają znaki inne niż cyfry. |
InvalidMonth | invalid_month | Kodowanie miesiąca nie pasuje do żadnego ze znanych zakresów stulecia. |
InvalidDate | invalid_date | Zdekodowana data nie jest prawdziwą datą kalendarzową. |
FutureDate | future_date | Zdekodowana data urodzenia jest w przyszłości (tylko tryb ścisły). |
InvalidChecksum | invalid_checksum | Cyfra kontrolna nie zgadza się z obliczoną wartością. |
AllSameDigit | all_same_digit | Wszystkie 11 cyfr jest identycznych (tylko tryb ścisły). |
Algorytm walidacji
Dział zatytułowany „Algorytm walidacji”Wagi: 1, 3, 7, 9, 1, 3, 7, 9, 1, 3
- Odrzuć dane wejściowe dłuższe niż 32 znaki. Usuń białe znaki. Sprawdź, czy pozostało dokładnie 11 cyfr.
- 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.
- Oblicz sumę kontrolną: pomnóż każdą z pierwszych 10 cyfr przez odpowiednią wagę, zsumuj iloczyny, oblicz
mod 10, odejmij od10, obliczmod 10ponownie. Wynik musi być równy cyfrze 11. - W trybie ścisłym odrzuć dane wejściowe, w których wszystkie 11 cyfr jest identycznych.
Pełna dokumentacja w sekcji Algorytmy.