Regular Expressions Validare CNP

Ce este nou in Microsoft Excel 2013?
Informatii despre cum se utilizeaza Microsoft Excel 2013
Calcule, Formule, Functii, Tabele pivot, Analiza datelor, etc
Închis
Avatar utilizator
Dr.Excel
Site Admin
Site Admin
Mesaje: 1990
Membru din: Sâm Ian 24, 2009 1:45 pm
Localitate: Bucharest
Contact:

Regular Expressions Validare CNP

Mesaj de Dr.Excel » Mar Iul 15, 2014 10:39 am

Avem un pattern ce valideaza CNP-ul, pe care sa il folosesc intr-uun UDF.

Cod: Selectaţi tot

Function EsteAdresaBuna(oAdresaDeValidat As String) As Boolean
 'On Error GoTo Catch
    
    Dim objRegExp As New RegExp
    Dim blnIsValidEmail As Boolean
    
    objRegExp.IgnoreCase = True
    objRegExp.Global = True
    objRegExp.Pattern = "^([a-zA-Z0-9_\-\.]+)@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$"
    
    blnIsValidEmail = objRegExp.Test(oAdresaDeValidat)
    
    EsteAdresaBuna = blnIsValidEmail
End Function
Codul de mai sus foloseste libraria RegEx pentru validarea unei adrese de email. Caut ceva asemanator pentru validarea unui CNP.

Multumesc

MCT, MCITP
MOS Master Instructor
IT Learning

Catalin B.
Moderator
Moderator
Mesaje: 813
Membru din: Vin Sep 09, 2011 4:05 pm
Localitate: Iaşi

Re: Regular Expressions Validare CNP

Mesaj de Catalin B. » Mar Iul 15, 2014 3:13 pm

De verificat:

Cod: Selectaţi tot

objRegExp.Pattern = "\b[1-8]\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])(0[1-9]|[1-4]\d|5[0-2]|99)\d{4}\b"
Eu am comparat cu formula:

Cod: Selectaţi tot

=IF(OR(LEN(A2)<>13;NOT(ISNUMBER(--A2)));"Nu e CNP";IF(OR(LEFT(A2)="0";MONTH(DATE(LOOKUP(--LEFT(A2;1);{1;35};{1900;18002})+MID(A2;2;2);MID(A2;4;2);MID(A2;6;2)))<>--MID(A2;4;2);LEFT(MOD(SUMPRODUCT(--MID(A2;ROW(INDIRECT("$1:$12"));1);{2;7;9;1;4;6;3;5;8;2;7;9});11);1)<>RIGHT(A2;1));"INVALID";"Cod Valid"))
Dar nu dau intotdeauna aceleasi rezultate, trebuie sa verific fiecare grup din expresie ...
Probleme să fie, că soluţii se găsesc...

Avatar utilizator
Dr.Excel
Site Admin
Site Admin
Mesaje: 1990
Membru din: Sâm Ian 24, 2009 1:45 pm
Localitate: Bucharest
Contact:

Re: Regular Expressions Validare CNP

Mesaj de Dr.Excel » Mar Iul 15, 2014 4:36 pm

Prea misto. Tx

MCT, MCITP
MOS Master Instructor
IT Learning

Catalin B.
Moderator
Moderator
Mesaje: 813
Membru din: Vin Sep 09, 2011 4:05 pm
Localitate: Iaşi

Re: Regular Expressions Validare CNP

Mesaj de Catalin B. » Mar Iul 15, 2014 4:54 pm

Cred ca UDF nu da acelasi rezultat cu formula pentru ca lipseste cheia de validare din regexp, ar trebui facuta o verificare suplimentara. Am completat eu functia cu cheia de control:

Cod: Selectaţi tot

Option Explicit

    Function EsteAdresaBuna(oAdresaDeValidat As String) As Boolean
     'On Error GoTo Catch
       Dim i As Integer, x As Integer
       Dim objRegExp As New RegExp
       Dim blnIsValidEmail As Boolean
       Dim CNP(13) As Integer
        objRegExp.IgnoreCase = True
        objRegExp.Global = True
        objRegExp.Pattern = "\b[1-8]\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])(0[1-9]|[1-4]\d|5[0-2]|99)\d{4}\b"
       
        blnIsValidEmail = objRegExp.Test(oAdresaDeValidat)
       
       
If Len(oAdresaDeValidat) <> 13 Then
        EsteAdresaBuna = "CNP-ul nu are 13 cifre"
Else
        For i = 1 To 13
        CNP(i) = Val(Mid(oAdresaDeValidat, i, 1))
        Next i
       
       
       x = (CNP(1) * 2 + CNP(2) * 7 + CNP(3) * 9 + CNP(4) * 1 + CNP(5) * 4 + CNP(6) * 6 + _
            CNP(7) * 3 + CNP(8) * 5 + CNP(9) * 8 + CNP(10) * 2 + CNP(11) * 7 + CNP(12) * 9) Mod 11
            
          If x = 10 Then x = 1
                      
          If x = CNP(13) And blnIsValidEmail Then
                 EsteAdresaBuna = blnIsValidEmail
             Else
                 EsteAdresaBuna = False
         End If
       
End If
        
    End Function
Cu regexp si cheia de control indeplinite simultan, nu ar trebui sa mai fie probleme...
Probleme să fie, că soluţii se găsesc...

Închis

Înapoi la “Intrebari despre Excel 2013”