Przejdź do głównej zawartości

Paszport

Numer polskiego paszportu składa się z dwóch wielkich liter (seria) oraz siedmiu cyfr, gdzie ostatnia cyfra jest sumą kontrolną obliczaną algorytmem wagowym ICAO 9303.

use SlashLab\Numerik\Numerik;
// Walidacja logiczna
Numerik::passport()->isValid('AB1234564'); // true
// Małe litery i spacje są usuwane podczas normalizacji
Numerik::passport()->isValid('ab 123456 4'); // true
// Szczegółowy wynik
$result = Numerik::passport()->validate('AB1234564');
$result->isValid; // true
// Parsowanie do obiektu wartości
$passport = Numerik::passport()->parse('AB1234564');
// null zamiast wyjątku w przypadku błędu
$passport = Numerik::passport()->tryParse('błędne-wejście'); // null

parse() i tryParse() zwracają instancję SlashLab\Numerik\ValueObjects\Passport.

MetodaTyp zwracanyOpis
getRaw()stringOryginalne wejście bez zmian.
getNormalized()string2 wielkie litery + 7 cyfr, np. AB1234564.
__toString()stringIdentyczne z getNormalized().
MetodaTyp zwracanyOpis
getSeries()stringPierwsze 2 litery — seria dokumentu, np. AB.
getSequentialNumber()string6-cyfrowy numer kolejny (pozycje 3–8), np. 123456.
getCheckDigit()stringCyfra kontrolna na pozycji 9, np. 4.
$passport = Numerik::passport()->parse('AB1234564');
$passport->getRaw(); // 'AB1234564'
$passport->getNormalized(); // 'AB1234564'
$passport->getSeries(); // 'AB'
$passport->getSequentialNumber(); // '123456'
$passport->getCheckDigit(); // '4'
// Małe litery i spacje normalizują się do tej samej wartości
$passport = Numerik::passport()->parse('ab 123456 4');
$passport->getRaw(); // 'ab 123456 4'
$passport->getNormalized(); // 'AB1234564'
  1. Odrzuć wejścia dłuższe niż 32 znaki — błąd InvalidLength.
  2. Usuń spacje i myślniki. Zamień na wielkie litery.
  3. Wymagaj dokładnie 9 znaków — inaczej błąd InvalidLength.
  4. Pierwsze 2 znaki muszą być literami — inaczej błąd InvalidCharacters.
  5. Znaki 3–9 muszą być cyframi — inaczej błąd InvalidCharacters.
  6. Zastosuj sumę kontrolną ICAO 9303 na pozycjach 1–8 — patrz sekcja Algorytmy.
PrzyczynaWartośćKiedy
InvalidLengthinvalid_lengthNumer nie ma dokładnie 9 znaków po normalizacji lub surowe wejście przekracza 32 znaki.
InvalidCharactersinvalid_charactersZnaki niebędące literami w serii lub znaki niebędące cyframi w części numerycznej.
InvalidChecksuminvalid_checksumCyfra kontrolna ICAO 9303 nie zgadza się.
  • Dowód osobisty — ten sam algorytm sumy kontrolnej ICAO 9303; identyfikuje tę samą osobę w Polsce.
  • PESEL — powszechny identyfikator osobowy powiązany z tą samą osobą.
If this saved you time → ☕ Buy me a coffee