Se afișează postările cu eticheta Validare CNP. Afișați toate postările
Se afișează postările cu eticheta Validare CNP. Afișați toate postările

02.02.2011

Calculul Datei Nasterii din CNP

Functia trateaza si CNP-urile persoanelor straine rezidente (al caror CNP incepe cu 7 sau 8 in functie de sex) sau al persoanelor straine ce nu sunt rezidente (avand 9 prima cifra din CNP) cu conditia ca persoana respectiva sa fie nascuta dupa 1920 - in caz contrar va afisa eronat secolul.
Inainte de a folosi formula, va recomand sa verificati corectitudinea CNP-urilor din tabela voastra folosind functia de validare CNP-uri.

Function Data_Nasterii(CNP As String) As Date
Dim An As Integer, Luna As Integer, Zi As Integer
Select Case Left(CNP, 1)
Case 1, 2
An = CInt("19" & Mid(CNP, 2, 2))
Case 5, 6
An = CInt("20" & Mid(CNP, 2, 2))
Case 7, 8, 9
    If CInt(Mid(CNP, 2, 2)) < 20 Then
        An = CInt("20" & Mid(CNP, 2, 2))
    Else
        An = CInt("19" & Mid(CNP, 2, 2))
    End If
End SelectLuna = CInt(Mid(CNP, 4, 2))
Zi = CInt(Mid(CNP, 6, 2))
Data_Nasterii = DateSerial(An, Luna, Zi)
End Function



Functie VBA ce valideaza CNP-uri

Fiindca lucrez destul de des cu ele, am scris o functie in VBA ce verifica daca un CNP este corect sau nu.
Pentru mai multe detalii despre cum se atribuie un CNP si ce reprezinta fiecare cifra din el, va invit sa cititi aici.

Function Validare_CNP(CNP As String) As String
    Dim i As Integer, x As Integer
    Dim cnp_array(13) As Integer
   If Len(CNP) <> 13 Then
        Validare_CNP = "CNP-ul nu are 13 cifre" ' daca CNP-ul nu are 13 caractere atunci functia returneaza mesajul "CNP-ul nu are 13 cifre"
    Else
        For i = 1 To 13
        cnp_array(i) = Val(Mid(CNP, i, 1))
        Next i
        x = (cnp_array(1) * 2 + cnp_array(2) * 7 + cnp_array(3) * 9 + cnp_array(4) * 1 + cnp_array(5) * 4 + cnp_array(6) * 6 + _
        cnp_array(7) * 3 + cnp_array(8) * 5 + cnp_array(9) * 8 + cnp_array(10) * 2 + cnp_array(11) * 7 + cnp_array(12) * 9) Mod 11
            If x = 10 Then
               x = 1
            End If
        If x = cnp_array(13) Then
        Validare_CNP = "Valid" ' daca rezultatul calculului de mai sus este egal cu a 13-a cifra din CNP atunci CNP-ul este valid
        Else
        Validare_CNP = "Invalid"
        End If
    End If
    End Function


Spor