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


Ostatnio diary jakby zamarło. Spowodowane jest to moim ‘odsunięciem’ się od komputera - siedzę i czytam moją ulubioną książkę ;) (tak, na sucho, “pierwszy raz” z nowym językiem programowania, jeśli mogę to robić z dala od kompa, to właśnie tak to wygląda - czytam manual/książkę przynajmniej raz na sucho, później dopiero robię “to” przy kompie - tylko bez skojarzeń, świntuchy ;) ), ostatnio chodzę trochę pograć, więcej sypiam (już nie po 4h na dobę ;) ), i więcej zajmuję sie domowymi rzeczami (w tym kobietą ;) ). Co prawda komputer włączam codziennie, ale tylko po to żeby poczytać co nieco, ew. obejrzeć jakiś film lub posłuchać muzyki. A jeśli robimy coś innego (zaraz napisze co) to komputer sie ziębi :)

Kupiliśmy sobie ostatnimi czasy dwie gry: Scrabble i Rummikub. Gry logiczne, pierwsza wymagająca znajomości jak największej ilości różnych słów, a do tego sporej dozy wyobraźni oraz szybkiego kojarzenia. Druga (Rummikub) trochę matematyki, i dużo, dużo myślenia i wyobraźni. W obydwie gra nam się świetnie, choć mamy za mało czasu na to - zbyt często się rozmijamy z moją Panią - ja pracuje zawsze od 7.30 do 15.30, a Ona bardzo różnie, zależy to od grafiku. Ale gra jako taka jest naprawdę super - polecam każdemu, super rozrywka :)

Poczytałem sobie też ostatnio nieco więcej na temat PyGTK, i poćwiczyłem sobie troszkę ten temat w więzieniu. Fajnie się nawet tego używa, stworzyłem sobie gui do genpass.py, i jako ćwiczenie pewnie za jakiś czas (jak mi się nie znudzi) porobię gui-e do pozostałych skryptów. Może też je udostępnię do ściągnięcia i potestowania ;).

A gdyby ktoś był spostrzegawczy/pamiętliwy, zobaczyłby że już kiedyś o PyGTK pisałem, że czytam i testuje etc. I owszem, tak było, ale od dupy strony - bawiłem się wtedy glade’em, czyli takim wizualnym edytorem. Pewni w przyszłości do niego wrócę, jak już wystarczająco zrozumiem jak to wszystko działa i wyląda od podszewki. A obecnie PyGTK testuję właśnie tworząc cały wygląd poszczególnych aplikacji ręcznie. Krok po kroku, linijka kodu po linijce… Fajne to nawet :)

A wracając do grania - byliśmy wczoraj znów na hali. Bomba. Szło mi już dużo lepiej, trochę się rozruszałem i nabrałem pewności siebie, przestałem się bać że coś spieprzę :) Trochę jeszcze mam zakwasy, i jeszcze nie do końca mi wychodzi zagrywka, czy też ścinanie, ale jeszcze ze 2-3 razy i powinienem grać na takim samym poziomie jak przed laty ;) I znów nie mogę się doczekać czwartku, żeby pójść na halę :) MNIAM! :)


Zgodnie z obietnicą, udostępniam światu trzecią część tłumaczenia tutoriala Django. Za czas jakiś część czwarta :)

W tej chwili zarówno w części drugiej, jak i trzeciej, jest kilka miejsc oznaczonych oczojebnym kolorkiem, co do których nie mam pomysłu jak je przetłumaczyć. Ma ktoś sensowny pomysł? :)

AKTUALIZACJA
Zmienione zostały adresy do poszczególnych części tłumaczenia.


Tłumaczenie drugiej części tutoriala Django jest pod adresem: urzenia.net/251/django-tutorial-czesc-2. Miłego czytania :)

AKTUZALIZACJA
Został zmieniony adres tłumaczenia.


Niedawno stwierdziłem, że czas coś zacząć robić w sprawie różnych frameworków. Jako, że chciałbym się przestawić z PHP na Pythona, tako też zainteresowałem się czymś Pythonowym. Konkretnie Django. Framework jest zrobiony całkiem elastycznie, przynajmniej dopóki znam go na takim etapie jakim znam… :) Czyli na razie podstawy niewiele wykraczające za tutorial.

W ramach nauki i poznawania Django, stwierdziłem, że przetłumaczę tenże, wspomniany przeze mnie przed chwilą, tutorial. Bardzo proszę o opinie nt tłumaczenia, poprawki jeśli coś przekręciłem, ewentualnie lepsze sformułowania niż użyte przeze mnie. Będę się starał mniej więcej na bieżąco przeglądać i poprawiać to co jest nie tak jak być powinno :)

Nie za długo też powinny się pojawić pozostałe trzy części tutoriala, wszystko zależy od tego, jak tam moje więzienie będzie mi czasu udostępniać :) O kolejnych częściach dam znać na tymże moim blogu… :)

Acha, zapomniałbym. Tutorial znajduje się pod tym adresem: urzenia.net/250/django-tutorial-czesc-1.

AKTUALIZACJA
Zmieniony został adres tłumaczenia.


jakis czas temu stworzylem na berlios projekt dla note. dali mi miejsce na serwerze (potrzebuje na ta chwile tylko kilka kilobajtow ;) ), subversion, cvs (z ktorego, jak i z kilku innych rzeczy, nie korzystam), mailliste i rozne takie. zrobilem to m.in. dla ‘reklamy’, zeby gdzies to pokazac ;) ciekawilo mnie, czy ktos sie tym zainteresuje. i w sumie dalej mnie to interesuje, ale chyba nie jest nikomu potrzebny taki skrypt ;) zlew. tak naprawde, to motywy mialem nieco inne: chcialem zobaczyc co i jak tam dziala, z mysla o przeniesieniu core do nich. obejrzalem, potestowalem… core tez jest tam zarejestrowane od jakiegos czasu. choc nic wiecej poza rejestracja z tego na razie nie wyniklo, jako ze dosc mocno rozgrzebalem core, na tyle ze czesciowo przystopowalem larka, i na razie tak zostalo, nie dokonczone… ;)

w kazdym badz razie, note dostalo dzis prosta stronke opisujaca go, wraz z dokumentacja. i tak juz pewnie zostanie ;)


dzieki sponsoringowi (;) ) sadu, uaktualnilem, a wrecz przepisalem skrypta perms. z nowych rzeczy: przelaczniki ‘-d’ i ‘-f’ mozna stosowac oddzielnie. jesli ktorys z nich nie zostanie podany, to prawa dla danej rzeczy nie zostana zmienione.
dodalem tez przelaczniki ‘-o’, ‘-a’, ‘-g’, ‘-b’, ktore odpowiadaja za zmiane wlasciciela i grupy pliku/katalogu. mozna tez ustalac, czy np. zmiana wlasciciela ma byc tylko dla plikow, tylko dla katalogow czy tez i dla plikow i dla katalogow.

dokladniejszy opis

na ta chwile wyszlo mi z tego fajne narzadko (imo of koz ;) ). dziala ladnie i sprawnie, ale oczywiscie wymaga jeszcze przetestowania w wiekszych warunkach bojowych ;) w czasie moich testow sprawdzalo sie ok.

najbardziej zadowolony jestem z tego, ze napisalem go zupelnie na sucho - tj. bez mozliwosci sprawdzania w trakcie czy dziala. w sadzie mam tylko windowsa, gdzie zmiana praw i wlasciciela niespecjalnie dziala. przetestowalem dopiero po powrocie do domu ;) i poza dwoma banalami (w sumie nie wiedzialem wczesniej, ze sys.exc_info()[1] zwraca obiekt, a nie tresc wyjatku). wiec styklo dodac str() i poszlo :) jestem z siebie dumny :P


kiedys napisalem sobie skrypcik, ktory mi sluzy jako ‘zolte karteczki’ do stosowania na konsoli - przy logowaniu sie na serwer wyswietlami co musze na nim zrobic, a czego nie zrobilem poprzednim razem ;)
wczoraj, jako ze mialem chwile w sadzie na ‘takie rzeczy’, odswiezylem go nieco i poprawilem i rozszerzylem o kilka drobiazgow. dziala calkiem fajnie imo ;) gdyby ktos sie chcial pobawic, testnac, czy po prostu uzywac, to mozna szukac po prawej stronie w menu, poddzial skrypty. wszelkie uwagi poprosze na maila, odnosnie dzialania, nie dzialania, lub ewentualnych rozszerzen programu ;)