Salve, avevo bisogno di aiuto con un programma che sto facendo per la scuola (3° anno di ITI Informatico) : il calcolo del codice fiscale.
Fino al codice del comune nessun problema, e debuggando il programma funzionava perfettamente generando il codice tranne l'ultima lettera.
Per calcolare l'ultima lettera si devono sommare i codici Ascii dei caratteri del codice fiscale in posizione pari, poi in posizione dispari, e la somma di tutti e due deve essere divisa per 26. Al resto della divisione corrisponderà una determinata lettera (in base alla tabella vista su Wikipedia ed altri siti).
E qui arriva il problema: con un ciclo For controllo carattere per carattere il codice, facendo l'indice i mod 2 dovrei capire se si ha una posizione dispari o una pari; dopodichè se il codice ascii del carattere è minore di 65 (quindi minore della A e quindi un numero) dovrebbe procedere a sommare alla variabile "spari" (somma dei pari) il valore del numero (in questo caso 0 corrisponde a 0, 1 a 1 ecc.). Ma a fare questa operazione non ci arriva perchè si blocca alla condizione Asc(Mid(codice,i,1) < 65 , dicendo che la lunghezza dell'argomento stringa dev'essere maggiore di 0. Non capisco proprio quale sia il problema, in quanto io non vado a toccare completamente la lunghezza della stringa.
Allego qui la parte di codice:
____________________________________
Dim valori_dispari() As Integer = {1, 0, 5, 7, 9, 13, 15, 17, 21, 1, 0, 5, 7, 9, 13, 15, 17, 21, 2, 4, 18, 20, 11, 3, 6, 8, 12, 14, 16, 10, 22, 25, 24, 23}
Dim spari, sdispari As Integer 'somma codici ascii caratteri pari e caratteri dispari
For i = 1 To 16
If i Mod 2 < 1 Then
If Asc(Mid(codice, i, 1)) < 65 Then
spari = spari + Val(Mid(codice, i, 1))
Else
spari = spari + (Asc(Mid(codice, i, 1)) - 65)
End If
Else
If Asc(Mid(codice, i, 1)) < 57 Then
sdispari = sdispari + valori_dispari(Val(Mid(codice, i, 1)))
Else
sdispari = sdispari + valori_dispari(Asc(Mid(codice, i, 1)) - 55)
End If
End If
Next
Dim sommatot As Integer = sdispari + spari
Dim resto() As String = {"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"}
Dim carattere_controllo As String = resto(sommatot Mod 26)
codice = codice & carattere_controllo
____________________________________________
Spero che mi possiate aiutare, grazie in anticipo.