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