Walidacja NIP, REGON, PESEL

Zmotywowaliście mnie i uznałem, że warto odrobinkę dopracować walidator PESEL. To jednak było mało. Do TODO załapały sie jeszcze NIP i REGON. Kilkanaście godzin sam na sam z Google, troszkę silnej woli i udało się po raz kolejny :)

Może słabo szukałem, ale nigdzie nie znalazłem gotowej biblioteki do pełnej walidacji tych numerów. Wszędzie tylko jakieś proste implementacje algorytmów, a autorzy uznają, że one wystarczają. Ja tak nie uważam.
Do walidatora numeru PESEL dodałem sugerowane poprawki i jedną dodatkową funkcję - sprawdzanie pełnoletności posiadacza owego numeru.

Cechy klasy nipValidator

  • Waliduje numery w wersji zwykłej, jak również z prefiksem kodu kraju (tzw. wersja europejska)
  • Pozwala uzyskać nazwę Urzędu Skarbowego, który wydał NIP
  • Pozwala określić stopień walidacji obejmujący to, czy Urzęd Skarbowy istnieje oraz poprawność kodu kraju

Cechy klasy regonValidator

  • Sprawdza wszystkie postaci numeru REGON, składające się z 7, 9, lub 14 cyfr.
  • Jest odporna na czeskie błędy w algorytmie dla REGON 14 i pozwala na sprawdzenie, czy mimo niepoprawności, numer przeszedł walidację na REGON 14
  • Odporna na błąd, w którym modulo 11 sumy kontrolnej wynosi 10 - używa cyfry 0

Myślę, że ten kod może być przydatny nie tylko podczas walidacji danych z formularzy, ale też przy generowaniu wszelkiego rodzaju statystyk, czy odpluskwianiu istniejących już baz danych.
Do czego będziecie tego używać, to już Wasza sprawa. Kolejnych notek na ten temat nie będę pisał, ale być może pojawią się jakieś nowsze wersje kodu z kolejnymi walidatorami. Z tego właśnie powodu przebudowie uległa struktura plików.

Pierwsza wersja pakietu to identificationNumbers 1.0

Pozdrawiam Was i dziękuję za motywujące komentarze :)

P.S
Dziękuję autorowi http://chemeng.p.lodz.pl/zylla/ut/, z którego strony korzystałem przy opracowywaniu kodu.

Komentarze

Info:

Nick:
Treść:

shfx napisał(a)
To cos kiepsko Pan szuka ... http://www.pear.php.net/package/Validate_PL
cysiaczek napisał(a)
Przyznaję, że tam nie zajrzałem, choć po przeglądnięciu widzę, że niewiele sie różnią od znanych mi implementacji. Niestety - jak w przypadku większości pakietów PEAR, pozostaje pewien niedosyt, bo autor mógł się pokusić o więcej. Nie wspomnę o braku walidacji 7-o cyfrowych numerów REGON :). Ja się starałem dostarczyć narzędzie nieco bardziej obiektowe i to miałem na myśli pisząc, że znane mi implementacje są niewystarczające.
Pozdrawiam.
MySZ napisał(a)
Jedna uwaga: używanie stałych (const) w klasach do celu konfiguracji (np czy coś ma być sprawdzane) jest bez sensu - żeby móc sprawdzać w obydwóch wersjach, muszę mieć dwie wersje klasy, z czego jedną muszę sam przerobić!
Tam powinna być zwykła właściwość, ew. potraktowana setterem/getterem (najlepiej magicznym, nie dodatkową funkcją - tzn żeby user widział i używał tylko: $validator->check_costam = true a nie: $validator->set_check_costam (true)), a na pewno nie const...
cysiaczek napisał(a)
Słuszna uwaga - dzięki - poprawię to w następnej wersji, bo widać, że tego nie przemyślałem :)
pawel_k napisał(a)
ja jeszcze proponuję sprawdzić działanie kodu z trybem strict :)
generalnie ok i fajnie ze na lgpl :)
cysiaczek napisał(a)
@pawel_k - tak, Ja po prostu nie pracuję na strict, bo z niektórymi skryptami, to bym nie wyrobił. Czasami też mi przez to jakiś kwiatek wyjdzie :)
pawel_k napisał(a)
napisz jeszcze proszę czy będziesz te błędy poprawiał bo wykorzystałem ten kod w firmie i część przełożonych testuje aplikacje w trybie developerskim wiec co chwilę słyszę "znajdują błąd" ;) jak nie planujesz poprawiać to sam przerobię wg własnych potrzeb ale wtedy stracę przyszłe aktualizacje co też wolę uniknąć ;)
cysiaczek napisał(a)
Jak znajdę trochę czasu, to poprawię te błędy. Samo API się raczej już nie zmieni, bo chyba nawet nie ma sensu.
rpiatek napisał(a)
Polecam walidacje wg tematu na stronie http://mvc.emailer.pl
 
Symfony_button