Algorytmy
Algorytmy walidacji w Numeriku opierają się wyłącznie na arytmetyce tablicowej — bez wyrażeń regularnych.
Wagi: 1, 3, 7, 9, 1, 3, 7, 9, 1, 3
- Usuń białe znaki. Odrzuć wejścia dłuższe niż 32 znaki. Wymagaj dokładnie 11 cyfr — inaczej błąd
InvalidLength. - Odrzuć znaki niebędące cyframi — błąd
InvalidCharacters. - Zdekoduj datę urodzenia według poniższej tabeli kodowania stulecia. Jeśli zapisany miesiąc nie pasuje do żadnego zakresu — błąd
InvalidMonth. Jeśli zdekodowana data nie istnieje w kalendarzu — błądInvalidDate. W trybie ścisłym: data urodzenia w przyszłości zwraca błądFutureDate. - Oblicz sumę kontrolną: pomnóż każdą z pierwszych 10 cyfr przez odpowiednią wagę i zsumuj wyniki. Następnie:
suma mod 10→10 minus wynik→mod 10. Otrzymana wartość musi zgadzać się z 11. cyfrą — inaczej błądInvalidChecksum. - W trybie ścisłym: jeśli wszystkie 11 cyfr jest identycznych — błąd
AllSameDigit.
Kodowanie stulecia
Dział zatytułowany „Kodowanie stulecia”Cyfry miesiąca w numerze PESEL kodują zarówno rzeczywisty miesiąc urodzenia, jak i stulecie — poprzez dodanie przesunięcia:
| 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 |
Przykład obliczenia
Dział zatytułowany „Przykład obliczenia”Numer: 9 2 0 6 0 5 1 2 1 8 6
| Pozycja | Cyfra | Waga | Iloczyn |
|---|---|---|---|
| 1 | 9 | 1 | 9 |
| 2 | 2 | 3 | 6 |
| 3 | 0 | 7 | 0 |
| 4 | 6 | 9 | 54 |
| 5 | 0 | 1 | 0 |
| 6 | 5 | 3 | 15 |
| 7 | 1 | 7 | 7 |
| 8 | 2 | 9 | 18 |
| 9 | 1 | 1 | 1 |
| 10 | 8 | 3 | 24 |
Suma = 9 + 6 + 0 + 54 + 0 + 15 + 7 + 18 + 1 + 24 = 134
134 mod 10 = 4 → 10 - 4 = 6 → 6 mod 10 = 6 — cyfra 11 wynosi 6 ✓
Wagi: 6, 5, 7, 2, 3, 4, 5, 6, 7
- Usuń myślniki i spacje. Odrzuć wejścia dłuższe niż 32 znaki. Wymagaj dokładnie 10 cyfr — inaczej błąd
InvalidLength. - Odrzuć znaki niebędące cyframi — błąd
InvalidCharacters. - Pierwsze 3 cyfry nie mogą być
000— inaczej błądInvalidFormat. - Pomnóż każdą z pierwszych 9 cyfr przez jej wagę i zsumuj iloczyny. Oblicz
suma mod 11. Wynik musi być równy dziesiątej cyfrze. Uwaga: wynik równy10jest niemożliwy do zakodowania jako pojedyncza cyfra, więc każdy taki numer zawsze skutkuje błędemInvalidChecksum.
Przykład obliczenia
Dział zatytułowany „Przykład obliczenia”Numer: 5 2 6 0 2 5 0 2 7 4
| Pozycja | Cyfra | Waga | Iloczyn |
|---|---|---|---|
| 1 | 5 | 6 | 30 |
| 2 | 2 | 5 | 10 |
| 3 | 6 | 7 | 42 |
| 4 | 0 | 2 | 0 |
| 5 | 2 | 3 | 6 |
| 6 | 5 | 4 | 20 |
| 7 | 0 | 5 | 0 |
| 8 | 2 | 6 | 12 |
| 9 | 7 | 7 | 49 |
Suma = 30 + 10 + 42 + 0 + 6 + 20 + 0 + 12 + 49 = 169
169 mod 11 = 4 — cyfra 10 wynosi 4 ✓
REGON używa algorytmu dwuetapowego. Forma 14-cyfrowa najpierw waliduje pierwsze 9 cyfr jako samodzielny REGON-9, a dopiero potem weryfikuje pełną liczbę.
9-cyfrowy REGON
Dział zatytułowany „9-cyfrowy REGON”Wagi: 8, 9, 2, 3, 4, 5, 6, 7
- Usuń białe znaki. Wymagaj dokładnie 9 cyfr.
- Pomnóż pierwsze 8 cyfr przez wagi i zsumuj. Oblicz
suma mod 11. Jeśli wynik to10, cyfra kontrolna musi wynosić0— w przeciwnym razie wynik musi być równy 9. cyfrze.
14-cyfrowy REGON
Dział zatytułowany „14-cyfrowy REGON”Wagi: 2, 4, 8, 5, 0, 9, 7, 3, 6, 1, 2, 4, 8
- Usuń białe znaki. Wymagaj dokładnie 14 cyfr.
- Zwaliduj cyfry 1–9 jako samodzielny REGON-9 (patrz wyżej).
- Pomnóż pierwsze 13 cyfr przez wagi i zsumuj. Oblicz
suma mod 11. Jeśli wynik to10, cyfra 14 musi wynosić0— w przeciwnym razie wynik musi być równy 14. cyfrze.
KRS nie ma publicznego algorytmu sumy kontrolnej — to sekwencyjny numer nadawany przez sąd rejestrowy przy wpisie do rejestru. Numerik sprawdza wyłącznie format i zakres:
- Usuń białe znaki. Odrzuć wejścia dłuższe niż 32 znaki. Wymagaj ≤ 10 cyfr.
- Odrzuć znaki niebędące cyframi.
- Wartość numeryczna musi być większa od
0— inaczej błądAllZeros. - W trybie ścisłym: uzupełnij do 10 cyfr zerami i odrzuć wejścia z identycznymi cyframi — błąd
AllSameDigit.
Żeby sprawdzić, czy konkretny numer KRS jest faktycznie przypisany do podmiotu, skorzystaj z oficjalnego API rejestru KRS.
NRB używa standardowego algorytmu IBAN MOD-97:
- Usuń spacje i myślniki. Usuń opcjonalny prefiks
PL. Odrzuć wejścia dłuższe niż 40 znaków. - Wymagaj dokładnie 26 cyfr.
- Wymagaj, aby wszystkie znaki były cyframi.
- Przestaw znaki w następującej kolejności: cyfry 3–26 (BBAN) +
2521(kodowanie numerycznePL) + cyfry 1–2 (cyfry kontrolne). - Oblicz resztę z dzielenia powstałej liczby przez 97. Wynik musi wynosić
1.
Walidacja VAT-EU to nakładka na algorytm NIP:
- Usuń spacje i myślniki. Odrzuć wejścia dłuższe niż 32 znaki.
- Wymagaj, aby pierwsze dwa znaki były
PL(bez rozróżniania wielkości liter) — inaczej błądInvalidFormat. - Usuń prefiks. Wymagaj dokładnie 10 cyfr.
- Zastosuj pełny algorytm NIP do wyodrębnionych cyfr.
Walidacja IBAN to nakładka na algorytm NRB:
- Usuń spacje i myślniki. Odrzuć wejścia dłuższe niż 40 znaków.
- Wymagaj, aby pierwsze dwa znaki były
PL(bez rozróżniania wielkości liter) — inaczej błądInvalidFormat. - Usuń prefiks. Wymagaj dokładnie 26 cyfr — inaczej błąd
InvalidLength. - Zastosuj pełny algorytm MOD-97 NRB do wyodrębnionych cyfr.