NIP i REGON

Twardy

W artykule dotyczącym PESELA http://http://4programmers.net/view.php?id=442 opisałem jak można sprawdzić poprawność numeru. Czy jest prawdziwy, czy nie? Sprawa NIPU i REGONU wygląda praktycznie tak samo. Różnica polega tylko na zmianie numerów wag (zobacz artykuł o numerze identyfikacyjnym) oraz/i nie stosuje się odejmowania od 10 a liczbą do dzielenia modulo stosuje się 11.
NIP to numer 10-cio cyfrowy odpowiednio dzielony myślnikami (np. 768-000-24-66). Zaś numer REGON to składania cyfr 7-mio, lub 9-cio cyfrowej kombinacji cyfr. Nie chciałbym tutaj opisywać, do czego służą te numery, gdyż wydaje mi się to zbędne. Jeżeli ktoś już zaczął pracować i jest zarejestrowany to pewnie wie co to numer NIP. Zaś posiadaczą własnej działalności, numer REGON jest nie obcy.
Dla numeru NIP stosuje się tablicę wag o następującej składnie: 6,5,7,2,3,4,5,6,7;
Dla REGONU 7-mio cyfrowego: 2,3,4,5,6,7;
Dla REGONU 9-cio cyfrowego: 8,9,2,3,4,5,6,7.
Wszystkie wyniki, jak wspomniałem, dzielimy modulo przez 11.

Przykład dla numeru identyfikacyjnego NIP 768-000-24-66

       6 5 7 2 3 4 5 6 7   -> wagi
       7 6 8 0 0 0 2 4 6   -> nr NIP (bez cyfry kontrolnej - ostatnia cyfra numeru NIP, czyli 6)
      -----------------------------------

suma (67 + 56 + 78 + 20 + 30 + 40 + 52 + 64 + 7*6)=
= ( 42 + 30 + 56 + 0 + 0 + 0 + 10 + 24 + 42)= 204

teraz dzielimy modulo przez wspomniane 11:
204 mod 11 = 6

Wynik taki sam jak suma kontrolna, a więc numer jest prawidłowy.

Jeżeli ktoś by miał ochotę dodać moduł sprawdzania poprawności numerów NIP i REGON (nawiasem mówiąc wykonal to brodny do art. PESEL) to proszę bardzo. Nie robię tego osobiście, gdyż wydaje mi się, że stworzenie takiego algorytmu to nic wielkiego, to po pierwsze a po drugie chyba nie chce mi się też.

NA MARGINESIE:

A już niebawem.
Sprawdzanie poprawności:
Numery banków i kard kredytowych.

Ale zanim to nastąpi najpierw wrzucę artykuł dotyczący plików PE - 32 bitowych plików wykonywalnych. Artykuł będzie opisywał budowę tych plików, w tym jak odróżnić w nich bibliotekę dll a program (nie mówiąc o rozszerzeniu). I jak można podczepić własny kod programu pod taki plik - wirus?

7 komentarzy

Siema, tu znalazlem fajny generator:
http://generatory.it/

Bogdan, mod = reszta z dzielenia :)

Nie rozgryziesz kart doladowan z komorki, bo po pierwsze zrobienie ich wg jakiegos wzoru bylo by kiepskim pomyslem a po drugie sa sprawdzane po stronie operatora. Jak dla mnie sa generowane losowo i trzymane na serwerach operatora.

Darkon napisał(a)

Przydaloby sie jeszcze rozgryzc numery z kart doladowan na komorki ;D
Czyli kraść???

Przydaloby sie jeszcze rozgryzc numery z kart doladowan na komorki ;D

Fajny artykuł. Zapomniałeś tylko dodca ze jesli modulo wyjdzie 10 to suma kontrolna wtedy równa sie 0 =) . Czekam na arta dotyczącego poprawności kart bankomatowych :)

Miło, że o mnie wspomniałeś :) Fakt, algorytm nic wielkiego, ale zawsze można takiego gotowca łatwo wrzucić do jakiejś aplikacji :) W końcu tyle się mówi o wielokrotnym wykorzystywaniu raz napisanego kodu :) Więc to może być chyba także taki prosty kodzik (dla jednego prosty, dla innego - niekoniecznie) :) Jak mi się kiedyś zachce, to może napiszę algorytmy dla pozostałych numerów na podstawie Twoich artów i wrzucę do jednego archiwum? :)