General

6.35 Controllo del Codice fiscale
  Federico Luciani
Public Function CheckCodFiscale(CFis As String) As Boolean
    'Autore: Federico Luciani
    'Accetta: CFis = Codice fiscale da verificare
    'Restituisce: true se il Codice fiscale è corretto
    If Len(CFis) <> 16 Then
       CheckCodFiscale = False
       Exit Function
    End If
    Dim i As Integer, p As Integer, d As Integer
    Dim SumDisp As Integer, SumPari As Integer
    Dim SumTot As Integer, Check As String
    Dim Resto(1 To 26) As String
    Resto(1) = "A"
    Resto(2) = "B"
    Resto(3) = "C"
    Resto(4) = "D"
    Resto(5) = "E"
    Resto(6) = "F"
    Resto(7) = "G"
    Resto(8) = "H"
    Resto(9) = "I"
    Resto(10) = "J"
    Resto(11) = "K"
    Resto(12) = "L"
    Resto(13) = "M"
    Resto(14) = "N"
    Resto(15) = "O"
    Resto(16) = "P"
    Resto(17) = "Q"
    Resto(18) = "R"
    Resto(19) = "S"
    Resto(20) = "T"
    Resto(21) = "U"
    Resto(22) = "V"
    Resto(23) = "W"
    Resto(24) = "X"
    Resto(25) = "Y"
    Resto(26) = "Z"
    For i = 2 To 14 Step 2
        Select Case Mid$(CFis, i, 1)
            Case "0": p = 0
            Case "1": p = 1
            Case "2": p = 2
            Case "3": p = 3
            Case "4": p = 4
            Case "5": p = 5
            Case "6": p = 6
            Case "7": p = 7
            Case "8": p = 8
            Case "9": p = 9
            Case "A": p = 0
            Case "B": p = 1
            Case "C": p = 2
            Case "D": p = 3
            Case "E": p = 4
            Case "F": p = 5
            Case "G": p = 6
            Case "H": p = 7
            Case "I": p = 8
            Case "J": p = 9
            Case "K": p = 10
            Case "L": p = 11
            Case "M": p = 12
            Case "N": p = 13
            Case "O": p = 14
            Case "P": p = 15
            Case "Q": p = 16
            Case "R": p = 17
            Case "S": p = 18
            Case "T": p = 19
            Case "U": p = 20
            Case "V": p = 21
            Case "W": p = 22
            Case "X": p = 23
            Case "Y": p = 24
            Case "Z": p = 25
        End Select
        SumPari = SumPari + p
    Next i
    For i = 1 To 15 Step 2
        Select Case Mid$(CFis, i, 1)
            Case "0": d = 1
            Case "1": d = 0
            Case "2": d = 5
            Case "3": d = 7
            Case "4": d = 9
            Case "5": d = 13
            Case "6": d = 15
            Case "7": d = 17
            Case "8": d = 19
            Case "9": d = 21
            Case "A": d = 1
            Case "B": d = 0
            Case "C": d = 5
            Case "D": d = 7
            Case "E": d = 9
            Case "F": d = 13
            Case "G": d = 15
            Case "H": d = 17
            Case "I": d = 19
            Case "J": d = 21
            Case "K": d = 2
            Case "L": d = 4
            Case "M": d = 18
            Case "N": d = 20
            Case "O": d = 11
            Case "P": d = 3
            Case "Q": d = 6
            Case "R": d = 8
            Case "S": d = 12
            Case "T": d = 14
            Case "U": d = 16
            Case "V": d = 10
            Case "W": d = 22
            Case "X": d = 25
            Case "Y": d = 24
            Case "Z": d = 23
        End Select
        SumDisp = SumDisp + d
    Next i
    SumTot = SumPari + SumDisp
    Check = Resto((SumTot Mod 26) + 1)
    If Check = UCase$(Right(CFis, 1)) Then
       CheckCodFiscale = True
    Else
       CheckCodFiscale = False
    End If
End Function
Per informazioni sull'algoritmo di calcolo del Codice fiscale si consiglia la lettura del Decreto Ministeriale del 23 dicembre 1976.


Se pensate di avere del materiale freeware interessante e volete pubblicarlo, allora leggete qui.