PESEL
PESEL (Powszechny Elektroniczny System Ewidencji Ludności) to 11-cyfrowy numer ewidencyjny obywateli Polski. Koduje datę urodzenia, stulecie, płeć i numer porządkowy.
use SlashLab\Numerik\Numerik;
// Szybkie sprawdzenieNumerik::pesel()->isValid('92060512186'); // true
// Pełny obiekt z danymi$result = Numerik::pesel()->validate('92060512186');$result->isValid; // true
// Parsowanie do obiektu z danymi$pesel = Numerik::pesel()->parse('92060512186');
// Null zamiast wyjątku$pesel = Numerik::pesel()->tryParse('zły-numer'); // nullMetody zwracanego obiektu
Dział zatytułowany „Metody zwracanego obiektu”parse() i tryParse() zwracają instancję SlashLab\Numerik\ValueObjects\Pesel.
Podstawowe
Dział zatytułowany „Podstawowe”| Metoda | Typ zwracany | Opis |
|---|---|---|
getRaw() |
string |
Oryginalny numer, bez zmian. |
getNormalized() |
string |
Cyfry po usunięciu białych znaków. |
__toString() |
string |
To samo co getNormalized(). |
Zwracające dane
Dział zatytułowany „Zwracające dane”| Metoda | Typ zwracany | Opis |
|---|---|---|
getBirthDate() |
DateTimeImmutable |
Data urodzenia zdekodowana z PESEL. |
getGender() |
Gender |
Gender::Male lub Gender::Female. |
getOrdinalNumber() |
int |
Numer porządkowy (cyfry 7–10). |
getCentury() |
int |
Stulecie urodzenia jako rok bazowy, np. 1900, 2000, 2100. |
Sprawdzające
Dział zatytułowany „Sprawdzające”| Metoda | Typ zwracany | Opis |
|---|---|---|
isMale() |
bool |
Skrót dla getGender() === Gender::Male. |
isFemale() |
bool |
Skrót dla getGender() === Gender::Female. |
getAge() |
int |
Pełne lata od daty urodzenia do dzisiaj. |
isAdult() |
bool |
true gdy getAge() >= 18. |
Przykłady
Dział zatytułowany „Przykłady”$pesel = Numerik::pesel()->parse('92060512186');
$pesel->getRaw(); // '92060512186'$pesel->getNormalized(); // '92060512186'$pesel->getBirthDate()->format('Y-m-d'); // '1992-06-05'$pesel->getGender(); // Gender::Female$pesel->isFemale(); // true$pesel->getOrdinalNumber(); // 1218 (cyfry 7–10)$pesel->getCentury(); // 1900$pesel->getAge(); // obliczony od dzisiaj$pesel->isAdult(); // trueKodowanie stulecia
Dział zatytułowany „Kodowanie stulecia”Cyfry miesiąca w numerze PESEL kodują zarówno rzeczywisty miesiąc, jak i stulecie urodzenia:
| Zapisany zakres miesięcy | 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 |
Numer nie ma dokładnie 11 cyfr po normalizacji. |
InvalidCharacters |
invalid_characters |
Po usunięciu białych znaków pozostały znaki niebędące cyframi. |
InvalidMonth |
invalid_month |
Kodowanie miesiąca nie odpowiada żadnemu ze znanych zakresów stulecia. |
InvalidDate |
invalid_date |
Zdekodowana data nie jest prawidłową datą kalendarzową. |
FutureDate |
future_date |
Zdekodowana data urodzenia jest w przyszłości — tylko w trybie ścisłym. |
InvalidChecksum |
invalid_checksum |
Cyfra kontrolna nie zgadza się z obliczoną wartością. |
AllSameDigit |
all_same_digit |
Wszystkie 11 cyfr jest identycznych — tylko w trybie ścisłym. |
Algorytm walidacji
Dział zatytułowany „Algorytm walidacji”Wagi: 1, 3, 7, 9, 1, 3, 7, 9, 1, 3
- Usuń białe znaki. Odrzuć numery dłuższe niż 32 znaki. Wymagaj dokładnie 11 cyfr — inaczej błąd
InvalidLength. - Zdekoduj datę urodzenia według powyższej tabeli. Sprawdź, czy data jest prawidłowa. W trybie ścisłym: odrzuć również przyszłe daty.
- Oblicz sumę kontrolną: pomnóż każdą z pierwszych 10 cyfr przez jej wagę i zsumuj. Następnie:
mod 10→10 minus wynik→mod 10. Wynik musi zgadzać się z 11. cyfrą — inaczej błądInvalidChecksum. - W trybie ścisłym: jeśli wszystkie 11 cyfr jest identycznych — błąd
AllSameDigit.
Pełna dokumentacja w sekcji Algorytmy.
If this saved you time → ☕ Buy me a coffee