Rutina pentru verificarea corectitudinii CNP

smcsa
Mesaje: 2805
Membru din: Mar Sep 29, 2009 7:29 pm
Localitate: Timisoara

Rutina pentru verificarea corectitudinii CNP

Mesaj de smcsa » Mie Sep 30, 2009 10:46 am

Rutina verifica corectitudinea CNP-ului (am primit-o si eu de la altii, o modificati pentru VBA sau formule, dupa cum doriti)

Cod: Selectaţi tot

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 C=10
  C=1
ENDIF
IF C=N13
  RETURN TRUE
ELSE
  RETURN FALSE
ENDIF
unde N1...N13 sunt cifrele din CNP

Dr.Windows
Moderator
Moderator
Mesaje: 4570
Membru din: Vin Iul 31, 2009 7:32 am

Re: Rutina pentru verificarea corectitudinii CNP

Mesaj de Dr.Windows » Mie Sep 30, 2009 11:21 am

In situatia asta poate ajuta mai mult daca poti pune procedura "completa" care si "sparge" CNP-ul pus intr-o celule in cifrele componente... ;)

smcsa
Mesaje: 2805
Membru din: Mar Sep 29, 2009 7:29 pm
Localitate: Timisoara

Re: Rutina pentru verificarea corectitudinii CNP

Mesaj de smcsa » Mie Sep 30, 2009 12:26 pm

Rutina imbunanatita. Inainte luasem cu copy / paste si n-am observat ca apare functia MOD(), care aici n-o avem, doar operatorul MOD

Cod: Selectaţi tot

Sub CNP()
Dim cnp_str As String
Dim i As Integer, c As Integer
Dim cnp_arr(13) As Integer

' aici despart cnp-ul in 13 cifre==================
 cnp_str = "1234567890123"
 For i = 1 To 13
  cnp_arr(i) = Val(Mid(cnp_str, i, 1))
 Next
' =================================================

 c = (cnp_arr(1) * 2 + cnp_arr(2) * 7 + cnp_arr(3) * 9 + cnp_arr(4) * 1 + cnp_arr(5) * 4 + cnp_arr(6) * 6 + cnp_arr(7) * 3 + cnp_arr(8) * 5 + cnp_arr(9) * 8 + cnp_arr(10) * 2 + cnp_arr(11) * 7 + cnp_arr(12) * 9) Mod 11
 If c = 10 Then c = 1
 If c = cnp_arr(13) Then
   MsgBox ("CNP corect")
 Else
   MsgBox ("CNP incorect")
 End If
 
End Sub
Acum, totul se poate pune intr-un for / next pentru a verifica mai multe celule, caz in care se inlocuieste ultimul If cu ce doriti (formatare, o noua coloana care se populeaza cu valori functie de corect / incorect, pornirea unei alarme anti-aeriene :lol: etc.

donci
Mesaje: 1
Membru din: Mar Apr 26, 2011 9:38 am

Re: Rutina pentru verificarea corectitudinii CNP

Mesaj de donci » Mar Apr 26, 2011 9:52 am

Buna!
Am incercat sa aplic rutina in Access2003, dar nu da roade :cry:
Da CNP invalid si la cele valide.
Am aplicat rutina la evenimentele inainte de update intr-un Form, pe campul CNP-ului.
Oare ce am gresit? :roll:

Avatar utilizator
gecs
Moderator
Moderator
Mesaje: 2311
Membru din: Sâm Aug 15, 2009 10:05 am
Localitate: Bucuresti

Re: Rutina pentru verificarea corectitudinii CNP

Mesaj de gecs » Mar Apr 26, 2011 5:51 pm

Verifica-l p-asta: 1781310358709. E corect?

Avatar utilizator
gecs
Moderator
Moderator
Mesaje: 2311
Membru din: Sâm Aug 15, 2009 10:05 am
Localitate: Bucuresti

Re: Rutina pentru verificarea corectitudinii CNP

Mesaj de gecs » Mar Apr 26, 2011 6:26 pm

@ smcsa
Rutina aia verifica dor cifra de control (ultima).

smcsa
Mesaje: 2805
Membru din: Mar Sep 29, 2009 7:29 pm
Localitate: Timisoara

Re: Rutina pentru verificarea corectitudinii CNP

Mesaj de smcsa » Mar Apr 26, 2011 7:35 pm

Da, conform algoritmului de aici. Nu verifica si corectitudinea primei cifre (sex) sau a urmatoarelor 6 (data nasterii)

Avatar utilizator
gecs
Moderator
Moderator
Mesaje: 2311
Membru din: Sâm Aug 15, 2009 10:05 am
Localitate: Bucuresti

Re: Rutina pentru verificarea corectitudinii CNP

Mesaj de gecs » Mar Apr 26, 2011 7:52 pm

Pai atunci cu mesajul "CNP corect" cum ramane? Poate fi cel mult "Cifra de control corecta" ;)

mrlpls
Moderator
Moderator
Mesaje: 404
Membru din: Mie Dec 08, 2010 10:50 pm

Re: Rutina pentru verificarea corectitudinii CNP

Mesaj de mrlpls » Mar Apr 26, 2011 8:22 pm

eu zic că acea cifră de control se pune abia după efectuarea calculelor. dacă în urma calculelor rezultatul e 4, de exemplu, cifra de control atribuită de funcționarul de la primărie nu are cum să fie alta.

smcsa
Mesaje: 2805
Membru din: Mar Sep 29, 2009 7:29 pm
Localitate: Timisoara

Re: Rutina pentru verificarea corectitudinii CNP

Mesaj de smcsa » Mar Apr 26, 2011 8:37 pm

Rutina nu e menita sa-l verifice pe functionarul de la Primarie, ci pe cel care introduce datele intr-o firma.

Închis

Înapoi la “Visual Basic for Application (VBA) cu Excel - Intrebari tehnice”