Przejdź do głównej zawartości

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

  1. Usuń białe znaki. Odrzuć wejścia dłuższe niż 32 znaki. Wymagaj dokładnie 11 cyfr — inaczej błąd InvalidLength.
  2. Odrzuć znaki niebędące cyframi — błąd InvalidCharacters.
  3. 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łąd InvalidDate. W trybie ścisłym: data urodzenia w przyszłości zwraca błąd FutureDate.
  4. Oblicz sumę kontrolną: pomnóż każdą z pierwszych 10 cyfr przez odpowiednią wagę i zsumuj wyniki. Następnie: suma mod 1010 minus wynikmod 10. Otrzymana wartość musi zgadzać się z 11. cyfrą — inaczej błąd InvalidChecksum.
  5. W trybie ścisłym: jeśli wszystkie 11 cyfr jest identycznych — błąd AllSameDigit.

Cyfry miesiąca w numerze PESEL kodują zarówno rzeczywisty miesiąc urodzenia, jak i stulecie — poprzez dodanie przesunięcia:

Zapisany zakres miesięcyRzeczywisty miesiącStulecie urodzenia
01 – 1201 – 121900 – 1999
21 – 3201 – 122000 – 2099
41 – 5201 – 122100 – 2199
61 – 7201 – 122200 – 2299
81 – 9201 – 121800 – 1899

Numer: 9 2 0 6 0 5 1 2 1 8 6

PozycjaCyfraWagaIloczyn
1919
2236
3070
46954
5010
65315
7177
82918
9111
108324

Suma = 9 + 6 + 0 + 54 + 0 + 15 + 7 + 18 + 1 + 24 = 134

134 mod 10 = 410 - 4 = 66 mod 10 = 6 — cyfra 11 wynosi 6


Wagi: 6, 5, 7, 2, 3, 4, 5, 6, 7

  1. Usuń myślniki i spacje. Odrzuć wejścia dłuższe niż 32 znaki. Wymagaj dokładnie 10 cyfr — inaczej błąd InvalidLength.
  2. Odrzuć znaki niebędące cyframi — błąd InvalidCharacters.
  3. Pierwsze 3 cyfry nie mogą być 000 — inaczej błąd InvalidFormat.
  4. 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ówny 10 jest niemożliwy do zakodowania jako pojedyncza cyfra, więc każdy taki numer zawsze skutkuje błędem InvalidChecksum.

Numer: 5 2 6 0 2 5 0 2 7 4

PozycjaCyfraWagaIloczyn
15630
22510
36742
4020
5236
65420
7050
82612
97749

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ę.

Wagi: 8, 9, 2, 3, 4, 5, 6, 7

  1. Usuń białe znaki. Wymagaj dokładnie 9 cyfr.
  2. Pomnóż pierwsze 8 cyfr przez wagi i zsumuj. Oblicz suma mod 11. Jeśli wynik to 10, cyfra kontrolna musi wynosić 0 — w przeciwnym razie wynik musi być równy 9. cyfrze.

Wagi: 2, 4, 8, 5, 0, 9, 7, 3, 6, 1, 2, 4, 8

  1. Usuń białe znaki. Wymagaj dokładnie 14 cyfr.
  2. Zwaliduj cyfry 1–9 jako samodzielny REGON-9 (patrz wyżej).
  3. Pomnóż pierwsze 13 cyfr przez wagi i zsumuj. Oblicz suma mod 11. Jeśli wynik to 10, 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:

  1. Usuń białe znaki. Odrzuć wejścia dłuższe niż 32 znaki. Wymagaj ≤ 10 cyfr.
  2. Odrzuć znaki niebędące cyframi.
  3. Wartość numeryczna musi być większa od 0 — inaczej błąd AllZeros.
  4. 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:

  1. Usuń spacje i myślniki. Usuń opcjonalny prefiks PL. Odrzuć wejścia dłuższe niż 40 znaków.
  2. Wymagaj dokładnie 26 cyfr.
  3. Wymagaj, aby wszystkie znaki były cyframi.
  4. Przestaw znaki w następującej kolejności: cyfry 3–26 (BBAN) + 2521 (kodowanie numeryczne PL) + cyfry 1–2 (cyfry kontrolne).
  5. Oblicz resztę z dzielenia powstałej liczby przez 97. Wynik musi wynosić 1.

Walidacja VAT-EU to nakładka na algorytm NIP:

  1. Usuń spacje i myślniki. Odrzuć wejścia dłuższe niż 32 znaki.
  2. Wymagaj, aby pierwsze dwa znaki były PL (bez rozróżniania wielkości liter) — inaczej błąd InvalidFormat.
  3. Usuń prefiks. Wymagaj dokładnie 10 cyfr.
  4. Zastosuj pełny algorytm NIP do wyodrębnionych cyfr.

Walidacja IBAN to nakładka na algorytm NRB:

  1. Usuń spacje i myślniki. Odrzuć wejścia dłuższe niż 40 znaków.
  2. Wymagaj, aby pierwsze dwa znaki były PL (bez rozróżniania wielkości liter) — inaczej błąd InvalidFormat.
  3. Usuń prefiks. Wymagaj dokładnie 26 cyfr — inaczej błąd InvalidLength.
  4. Zastosuj pełny algorytm MOD-97 NRB do wyodrębnionych cyfr.
If this saved you time → ☕ Buy me a coffee