Controllo codice fiscale

Funzione per controllare se il testo inserito ha la sintassi di un codice fiscale

Questa funzione in vbnet restituisce un valore booleano (true o false) a seconda se la stringa data in input rispetta o meno la sintassi di un codice fiscale. 6 lettere, 2 numeri, una lettera, 2 numeri, 1 lettera, 3 numeri e un'ultima lettera. Questa funziona verifica solamente la sintassi, non entra nel merito. Prossimamente poster? quella per calcolarlo dando in input nome, cognome, data di nascita, comune di nascita e sesso. Nel frattempo, se vi serve, potete calcolarlo qu?

Spero possa servirvi


VB NET

 Public Function ControllaCodiceFiscale(strCf As String) As Boolean
 
        Dim uscita As Boolean = False
 
        Const caratteri As Integer = 16
 
        If strCf Is Nothing Then
 
            Return uscita
 
        End If
 
        If Not (strCf.Length = caratteri) Then
 
            Return uscita
 
        End If
 
        Try
 
            Const omocodici As String = "LMNPQRSTUV"
 
            Const listCheck As String = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
 
            Dim listaPari As Integer() = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25}
 
            Dim listaDispari As Integer() = {1, 0, 5, 7, 9, 13, 15, 17, 19, 21, 2, 4, 18, 20, 11, 3, 6, 8, 12, 14, 16, 10, 22, 25, 24, 23}
 
            strCf = strCf.ToUpper
 
            Dim cCodice As Char() = strCf.ToCharArray
 
            Dim k As Integer = 0
 
            For k = 6 To 14
 
                If (k = 8) OrElse (k = 11) Then
 
                Else
 
                    Dim x As Integer = (omocodici.IndexOf(cCodice(k)))
 
                    If Not (x = -1) Then
 
                        cCodice(k) = x.ToString.ToCharArray()(0)
 
                    End If
 
                End If
 
            Next
 
            uscita = True
 
            If uscita Then
 
                Dim somma As Integer = 0
 
                cCodice = strCf.ToCharArray
 
                Dim i As Integer = 0
 
                For i = 0 To 14
 
                    Dim c As Char = cCodice(i)
 
                    Dim x As Integer = "0123456789".IndexOf(c)
 
                    If Not (x = -1) Then
 
                        c = listCheck.Substring(x, 1).ToCharArray()(0)
 
                    End If
 
                    x = listCheck.IndexOf(c)
 
                    If (i Mod 2) = 0 Then
 
                        x = listaDispari(x)
 
                    Else
 
                        x = listaPari(x)
 
                    End If
 
                    somma += x
 
                Next
 
                uscita = (listCheck.Substring(somma Mod 26, 1) = strCf.Substring(15, 1))
 
            End If
 
        Catch ex As Exception
 
            uscita = False
 
        End Try
 
        Return uscita
 
    End Function