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...