Obsługa błędów
isValid()ivalidate()nigdy nie rzucają wyjątków - zawsze zwracają wartość.parse()dla nieprawidłowych danych rzuca wyjątekValidationExceptionz konkretnym powodem błędu.tryParse()dla nieprawidłowych danych zwracanull.
Wszystkie cztery metody są dostępne w każdej z klas identyfikatora.
Hierarchia wyjątków
Dział zatytułowany „Hierarchia wyjątków”Wszystkie wyjątki dziedziczą po SlashLab\Numerik\Exceptions\ValidationException, która dziedziczy po \RuntimeException.
\RuntimeException└── ValidationException ├── InvalidFormatException — zła długość lub nieprawidłowe znaki ├── InvalidChecksumException — niezgodność cyfry kontrolnej └── InvalidDateException — niemożliwa data zakodowana wewnątrz identyfikatoraWszystkie klasy wyjątków znajdują się w przestrzeni nazw SlashLab\Numerik\Exceptions.
Kiedy pojawia się każdy wyjątek
Dział zatytułowany „Kiedy pojawia się każdy wyjątek”| Wyjątek | Warunek |
|---|---|
InvalidFormatException | Nieprawidłowa długość, niedozwolone znaki lub naruszenie reguły strukturalnej (np. kod urzędu skarbowego NIP 000). |
InvalidChecksumException | Cyfra kontrolna nie zgadza się z obliczoną wartością. |
InvalidDateException | Data zakodowana w PESEL jest niemożliwa — nieprawidłowy miesiąc, nieistniejąca data kalendarzowa lub data urodzenia w przyszłości. |
Przechwytywanie wyjątków
Dział zatytułowany „Przechwytywanie wyjątków”use SlashLab\Numerik\Numerik;use SlashLab\Numerik\Exceptions\ValidationException;use SlashLab\Numerik\Exceptions\InvalidFormatException;use SlashLab\Numerik\Exceptions\InvalidChecksumException;use SlashLab\Numerik\Exceptions\InvalidDateException;
// Przechwytywanie dowolnego błędu walidacjitry { $pesel = Numerik::pesel()->parse($input);} catch (ValidationException $e) { // obsłuż dowolny błąd parsowania echo $e->getMessage();}
// Przechwytywanie konkretnych błędówtry { $pesel = Numerik::pesel()->parse($input);} catch (InvalidFormatException $e) { // zła długość lub znaki} catch (InvalidChecksumException $e) { // niezgodność sumy kontrolnej} catch (InvalidDateException $e) { // niemożliwa data urodzenia zakodowana wewnątrz}Wybór między parse() a validate()
Dział zatytułowany „Wybór między parse() a validate()”Użyj parse(), gdy potrzebujesz wyodrębnionych danych z numeru i wolisz obsługiwać błędy przez wyjątki — np. wewnątrz serwisu, który już ma blok catch.
Użyj tryParse(), gdy również potrzebujesz wyodrębnionych danych z numeru, ale zamiast wyjątku wolisz dostać null — przydatne w pętlach lub potokach importu danych.
// Rzuca przy nieprawidłowym numerze$pesel = Numerik::pesel()->parse($input);
// Zwraca null przy nieprawidłowym numerze$pesel = Numerik::pesel()->tryParse($input);if ($pesel === null) { // obsłuż nieprawidłowy numer}Tryb ścisły
Dział zatytułowany „Tryb ścisły”Wszystkie klasy identyfikatorów przyjmują parametr konstruktora strict (domyślnie true). W trybie ścisłym wejścia, które przechodzą wszystkie sprawdzenia algorytmiczne, ale wyglądają podejrzanie — np. ciąg złożony z jednej powtarzającej się cyfry — są odrzucane z ValidationFailureReason::AllSameDigit.
// Tryb ścisły włączony (domyślnie) — odrzuca podejrzane-ale-poprawne wejściaNumerik::pesel()->validate('11111111111'); // błąd: AllSameDigit
// Tryb ścisły wyłączony — akceptuje wszystko strukturalnie i algorytmicznie poprawneNumerik::pesel(strict: false)->validate('11111111111'); // przechodziWyłącz tryb ścisły gdy przetwarzasz dane historyczne zawierające wartości zastępcze albo gdy chcesz odróżnić „strukturalnie nieprawidłowe” od „algorytmicznie poprawne, ale podejrzane” w potoku jakości danych.
Ochrona przed długością wejścia
Dział zatytułowany „Ochrona przed długością wejścia”Wszystkie metody natychmiast odrzucają wejścia dłuższe niż 32 znaki, zanim jakiekolwiek przetwarzanie się rozpocznie — zabezpieczenie przed potencjalnymi atakami DoS przez bardzo duże ciągi.