Gdyby ktoś potrzebował, to poniżej są przykłady sprawdzanie numerów PESEL, REGON i NIP zaimplementowane w Pythonie:
- PESEL
-
def check_pesel(pesel): sum, ct = 0, [1, 3, 7, 9, 1, 3, 7, 9, 1, 3, 1] for i in range(11): sum += (int(P[i]) * ct[i]) return (str(sum)[-1] == '0') - REGON
-
def check_regon(regon): sum = 0 w = [8, 9, 2, 3, 4, 5, 6, 7] if len(regon) == 7: w = w[2:] elif len(regon) == 14: # ciężko znaleźć algorytm (wagi) do sprawdzenia ostatnich # pięciu cyfr, więc olewamy regon = regon[:9] ct = int(regon[-1]) for i in range(len(w)): sum += (int(R[i]) * w[i]) mod = sum%11 if (mod == ct) or (mod == 10 and ct == 0): return True return False - NIP
-
def check_nip(nip): sum, ct = 0, [6, 5, 7, 2, 3, 4, 5, 6, 7] for i in range(9): sum += (int(N[i]) * ct[i]) return ((sum%11) == int(nip[-1]))
Sumy kontrolne są liczone według wzorów dostarczonych przez Wikipedię: PESEL, REGON, NIP.
Oczywiście powyższe funkcje zakładają że dostają poprawny numer, walidację tego pozostaje zrobić we własnym zakresie…
UPDATE
Poprawiłem nieco funkcję sprawdzającą REGON - uwzględnia ona teraz REGONy zarówno 7 (stare), jak i 9 czy 14 cyfrowe (te ostatnie, to “zwykły” REGON wraz z 5 cyframi lokalizacyjnymi - więcej: wipos.p.lodz.pl/zylla/ut/nip-rego.html).