[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: NIP, PESEL
Pawel Borkowski wrote:
>
> Mam prosbe.
>
> Pisales na grupie dydkusyjnej (bodajze w styczni tego roku), ze mozesz
> przeslac zainteresowanym procedury sprawdzania poprawnosci numeru PESEL.
> Jesli jest to aktualne, to bylbym wdzieczny za takowa i jesli masz to
> rowniez do NIP'u (moze byc procedura, algortm ...)
>
> z gory dziekuje
> Pawel Borkowski
> pborek@poczta.onet.pl
Jako, że otrzymuję dużo takich prósb, przesyłam niniejszą procedurę (za
zgodą autora) również na listę dyskusyjną.
Należy pamiętać, iż nie jest nam znany sposób konstruowania numeru PESEL
dla
osób urodzonych po roku 2000, dlatego nie należy procedurze ufać
bezgranicznie ;-)
Pozdrawiam.
--
Tomasz Fidecki
/*****************************************************************************\
NAME: spr-pnr.p
AUTHOR: Arek Panas
CODEPAGE: 1250
DATE: 99.01.25
PURPOSE: Procedura sprawdzająca poprawność numerów
PESEL, NIP i REGON
PARAMETERS:
p-typ - typ sprawdzanego numeru identyfikacyjnego
("PESEL", "NIP", "REGON")
p-pnr - nr identyfikacyjny
p-ok - zwraca poprawność numeru: (TRUE - numer jest OK
FALSE - numer jest błędny
? - błąd wywołania)
MODIFICATIONS:
COMMENTS: Rozpowszechnianie na zasadzie Freeware. Autor nie bierze
odpowiedzialności za skutki działania programu.
\*****************************************************************************/
DEF INPUT PARAMETER p-typ AS CHAR.
DEF INPUT PARAMETER p-pnr AS CHAR.
DEF OUTPUT PARAMETER p-ok AS LOG.
DEF VAR maska AS CHAR.
DEF VAR i AS INT.
DEF VAR suma AS INT INIT 0.
p-pnr = TRIM(p-pnr).
p-ok = no.
IF p-typ = "PESEL" THEN maska = "1379137913".
ELSE IF p-typ = "NIP" THEN maska = "657234567".
ELSE IF p-typ = "REGON" THEN maska = "89234567".
ELSE DO:
p-ok = ?.
RETURN.
END.
IF LENGTH(p-pnr) <> LENGTH(maska) + 1 THEN DO:
p-ok = ?.
RETURN.
END.
DO i = 1 TO LENGTH(maska):
suma = suma + (ASC(SUBSTRING(p-pnr,i,1)) - ASC("0")) *
(ASC(SUBSTRING(maska,i,1)) - ASC("0")).
END.
IF p-typ = "PESEL" THEN i = 10 - (suma MOD 10).
ELSE i = suma MOD 11.
IF i = 10 THEN i = 0.
p-ok = i = (ASC(SUBSTRING(p-pnr,LENGTH(maska) + 1,1)) - ASC("0")).