codice:
Public Function CheckCodFiscale(aValue As String) As Boolean
    
    aValue = UCase(aValue)
        
    If Trim(aValue) = "" Then
        CheckCodFiscale = True
        Exit Function
    End If
    Dim I As Integer
    Dim N As Integer
    Dim TBC(36) As Integer
    Dim nDispari As Integer
    Dim nPari As Integer
    TBC(0) = 0
    TBC(1) = 1: TBC(2) = 0: TBC(3) = 5: TBC(4) = 7: TBC(5) = 9
    TBC(6) = 13: TBC(7) = 15: TBC(8) = 17: TBC(9) = 19: TBC(10) = 21
    TBC(11) = 2: TBC(12) = 4: TBC(13) = 18: TBC(14) = 20: TBC(15) = 11
    TBC(16) = 3: TBC(17) = 6: TBC(18) = 8: TBC(19) = 12: TBC(20) = 14
    TBC(21) = 16: TBC(22) = 10: TBC(23) = 22: TBC(24) = 25: TBC(25) = 24
    TBC(26) = 23: TBC(27) = 1: TBC(28) = 0: TBC(29) = 5: TBC(30) = 7
    TBC(31) = 9: TBC(32) = 13: TBC(33) = 15: TBC(34) = 17: TBC(35) = 19
    TBC(36) = 21
'   Controllo sulla lunghezza della stringa: deve essere di 16 caratteri
    If Len(aValue) <> 16 Then
        CheckCodFiscale = False
        Exit Function
    End If
'   controllo sull'ultimo carattere
'   ciclo dispari: primo char, terzo, ecc...
    nDispari = 0
    For I = 1 To 15 Step 2
        N = Asc(Mid$(aValue, I, 1))
        If N < 58 Then
            N = N - 21
        Else
            N = N - 64
        End If
        If N < 0 Or N > 36 Then
            CheckCodFiscale = False
        End If
        nDispari = nDispari + TBC(N)
    Next I
'   ciclo pari: secondo char, quarto, ecc...
    nPari = 0
    For I = 2 To 14 Step 2
        N = Asc(Mid$(aValue, I, 1))
        N = Asc(Mid$(aValue, I, 1))
        If N < 58 Then
            N = N - 48
        Else
            N = N - 65
        End If
        If N < 0 Or N > 36 Then
            CheckCodFiscale = False
        End If
        nPari = nPari + N
    Next I
    I = (nPari + nDispari) Mod 26 + 65
    N = Asc(Mid$(aValue, 16, 1))
    If I = N Then
        CheckCodFiscale = True
    Else
        CheckCodFiscale = False
    End If
End Function