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