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