Search  
Friday, February 10, 2012 ..:: Forum ::.. Register  Login
 Forum Minimize
Pentru a putea posta mesaje trebuie să vă înregistraţi.
Notă: Mesajele cu conţinut jignitor sau ilegal (inclusiv cereri de soft piratat) nu sunt acceptate şi vor fi şterse imediat .

Pentru a primi raspunsuri rapide si corecte, scrieti in mesaj ce intentionati sa faceti, ce mesaj de eroare primiti, in ce context si in urma caror actiuni. De asemenea, mentionati versiunea de FoxPro in care lucrati!
Dacă nu specificați versiunea, se consideră VFP 9.0 SP2.

SearchForum Home
  Visual FoxPro  Visual FoxPro in general  Validare CNP...
 Validare CNP
 
 1/8/2009 2:57:19 PM
User is offlinejohnc
100 posts
5th


Validare CNP
 (Romania)
Aveti o functie de validare CNP la indemana? Va multumesc anticipat.
 1/8/2009 3:37:06 PM
User is offlineCostel
225 posts
www.adrisoft.ro
4th




Re: Validare CNP
 (N/A)
Sigur exista pe forum postat asa ceva dar unde ?!! n-as putea sa-ti spun.
Codul de mai jos l-am gasit cu mult timp in urma dar si-a facut cu succes datoria

FUNCTION CNP        &&        validare CNP
    LPARAMETERS kqk
    LOCAL qNP,ver
    qNP = ALLTRIM(IIF(TYPE('kqk')='N',Str(kqk,13),kqk))
    IF Len(qNP) # 13
        ?? CHR(7)
        WAIT ' Lungime CNP gresita ' WINDOW NOWAIT
        RETURN .F.
    ENDIF
    ver = 0
    ver = ver + VAL(SUBSTR(qNP,  1, 1)) * 2
    ver = ver + VAL(SUBSTR(qNP,  2, 1)) * 7
    ver = ver + VAL(SUBSTR(qNP,  3, 1)) * 9
    ver = ver + VAL(SUBSTR(qNP,  4, 1)) * 1
    ver = ver + VAL(SUBSTR(qNP,  5, 1)) * 4
    ver = ver + VAL(SUBSTR(qNP,  6, 1)) * 6
    ver = ver + VAL(SUBSTR(qNP,  7, 1)) * 3
    ver = ver + VAL(SUBSTR(qNP,  8, 1)) * 5
    ver = ver + VAL(SUBSTR(qNP,  9, 1)) * 8
    ver = ver + VAL(SUBSTR(qNP, 10, 1)) * 2
    ver = ver + VAL(SUBSTR(qNP, 11, 1)) * 7
    ver = ver + VAL(SUBSTR(qNP, 12, 1)) * 9
    ver = MOD(ver, 11)
    If ver = 10
        ver = 1
    ENDIF
    If ver = VAL(SUBSTR(qNP, 13, 1)) Then
        RETURN .T.
    Else
        ?? CHR(7)
        WAIT ' CNP incorect ! ' WINDOW NOWAIT
        RETURN .F.
    EndIf
ENDFUNC



Cred ca ar fi bine sa le gasim in sectiunea de Downloads atit aceasta cu CNP-ul cit si validare CUI, iBan sau ce-o mai fi.




Nu munci atit de mult incit sa nu-ti mai ramina timp ca sa cistigi bani. (proverb evreiesc)
 1/8/2009 3:54:52 PM
User is offlineMarian Dobre
371 posts
3rd


Re: Validare CNP
 (N/A)
Uite o trimitere la
http://www.profox.ro/Forum/tabid/55/forumid/12/threadid/19790/scope/posts/Default.aspx


Orice putere omeneasca este un compus de rabdare si de timp. Balzac
 1/9/2009 8:47:48 AM
User is offlineVictor Iuga
153 posts
5th


Re: Validare CNP
 (Romania)

Io folosesc procedura asta, pt cnp si cif. Cand o sa am timp o s-o extind si la iban

 

********* algocod
parameters pcod
IF EMPTY(pcod)
  RETURN      && decat cod gresit, mai bine fara
ENDIF
IF TYPE("pcod")#"C"
  RETURN .f.
ENDIF
IF VAL(pcod)=0
  RETURN .f.
ENDIF
swcod=.f.
DO CASE
CASE LEN(ALLTRIM(pcod))>10
  swcod= f_cnp()
CASE LEN(ALLTRIM(pcod))> 1  && intre 2 si 10 caractere numerice
  swcod= f_cui()
ENDCASE
RETURN swcod


**************
FUNCTION f_cnp
pcnp = pcod
FOR i = 1 TO 13
 IF !ISDIGIT(SUBSTR(pcnp,i,1))
   RETURN .f.
 ENDIF
 wn = "N" +ALLTRIM(STR(i,2))
 &wn = VAL(SUBSTR(pcnp , i ,1))
ENDFOR

c=MOD((N1*2+N2*7+N3*9+N4*1+N5*4+N6*6+N7*3+N8*5+N9*8+N10*2+N11*7+N12*9),11)
if ((int(c)=10 .and. n13=1) .or. int(c)=N13)
else
  retu .f.
endi
if left(pcnp,1)#"1" .and. left(pcnp,1)#"2" .and. ;
   left(pcnp,1)#"5" .and. left(pcnp,1)#"6"
  retu .f.
endi
if ctod(subs(pcnp ,6,2)+"/"+subs(pcnp ,4,2)+"/"+subs(pcnp ,2,2)) ={}
  retu .f.
endi
retu .t.

**************
FUNCTION f_cui
pcui = ALLTRIM(pcod)
FOR i = 1 TO LEN(pcui)    && test ca-s numa cifre
 IF !ISDIGIT(SUBSTR(pcui,i,1))
   RETURN .f.
 ENDIF
ENDFOR
kcui = "235712357"  && inversa cheii de test "7532 1 7532"
icui =""
FOR i = LEN(pcui) TO 1 STEP -1   && inversare cui
 icui = icui + SUBSTR(pcui,i,1)
ENDFOR
cifrac = VAL(LEFT(icui,1))    && cifra de control
totalul = 0
FOR i = 1 TO LEN(icui)
 j=i+1
 wtot = VAL(SUBSTR(icui,j,1)) * VAL(SUBSTR(kcui,i,1))
 totalul = totalul + wtot
ENDFOR
totalul = totalul * 10
c = MOD(totalul,11)
c = IIF(c=10,0,c)
IF c # cifrac
  RETURN .f.
ENDIF
RETURN

 2/8/2010 11:34:19 AM
User is offlinejohnc
100 posts
5th


Re: Validare CNP
 (N/A)
D-le Costel, revin la mesajul dv. mai vechi, am folosit si eu ceva asemanator si am constatat ca nu e corecta procedura, adica am cnp-ul 2936013104121 sau 1719110804006 - gresite, care totusi trec la verificare.
 2/8/2010 12:17:07 PM
User is offlineaflorin
838 posts
1st


Re: Validare CNP
 (N/A)
 johnc wrote
D-le Costel, revin la mesajul dv. mai vechi, am folosit si eu ceva asemanator si am constatat ca nu e corecta procedura, adica am cnp-ul 2936013104121 sau 1719110804006 - gresite, care totusi trec la verificare.

Codul de mai sus verifica doar cifra de control, conform algoritmului. Daca vrei sa iti faca si celelalte verificari, trebuie sa mai adaugi cod pentru:
- cifrele 4 si 5 reprezentand luna sa fie in 01-12
- cifrele 6 si 7 reprezentand ziua sa fie in 01-31, cu variatii de la luna la luna (adica 28, 29, 30)
- cifrele 8 si 9 reprezentand judetul sa fie in 01-52 (dar mai sunt si niste gauri)
un simplu SUBSTR() iti rezolva problema

Florin Aparaschivei - Iasi
  Visual FoxPro  Visual FoxPro in general  Validare CNP...

Search  Forum Home         

 Google Ads Minimize

    

Copyright 2002-2010 Profox   Terms Of Use  Privacy Statement