
psycho85 (Ex-Member)
Pro
    
Messaggi: 72
Iscritto: 20/08/2006
|
Questo topic è stato chiuso dal moderatore Ciao a tutti, sono quasi riuscito a creare un generatore di codice fiscale in VB Express 2005...
quello che non riesco a fare è trovare l'ultimo numero, quello di controllo.
ho capito come funziona l'algoritmo ma non riesco a realizzarlo in VB...
a questo indirizzo:
http://community.visual-basic.it/lucianob/articles/2234.aspx
c'è il codice, ma qual'cuno sa spiegarlo bene? Non voglio copiare il codice e incollarlo nel mio programma VOGLIO CAPIRLO!!!
|
|

BurnOut (Normal User)
Newbie
    
Messaggi: 4
Iscritto: 30/08/2007
|
|
|

psycho85 (Ex-Member)
Pro
    
Messaggi: 72
Iscritto: 20/08/2006
|
Ciao, ho dato uno sguardo al tuo blog, molto carino...però non ho trovato niente che mi aiutasse a risolvere il problema
|
|

Il Totem (Admin)
Guru^2
    
Messaggi: 3635
Iscritto: 24/01/2006
|
Infatti, BurnOut, alias Skull, ha postato qualcosa che potrei definire spam, dato che il suo blog non c'entra niente con la discussione.
Ho guardato il codice, ma quello non genera un codice fiscale, ma lo analizza e oltretutto usa le espressioni regolari. Se mi posti una descrizione di come fare a creare il codice fiscale con il tuo sorgente posso darti una mano.
|
|

psycho85 (Ex-Member)
Pro
    
Messaggi: 72
Iscritto: 20/08/2006
|
Allora, il codice fiscale è formato da 16 cifre alfanumeriche, quindi numeri e lettere.
Io ho ricavato le prime 15, queste si ricavano dai dati anagrafici del soggetto:
Cognome - 3 Lettere
Nome - 3 Lettere
Data di nascita - 5 Caratteri alfanumerici
Anno - 2 Numeri
Mese - 1 Lettera
Giorno - 2 Numeri
Comune di nascita - 4 Caratteri alfanumerici
---
l'ultimo numero è il risultato di un algoritmo dei precedenti 15 caratteri alfanumerici ricavati.
per vedere come calcolarlo vi invito a leggere la tabella del sito dell'agenzia delle entrate...
http://www.agenziaentrate.it/ilwwcm/connect/Nsi/Servizi/Co ...
|
|

Il Totem (Admin)
Guru^2
    
Messaggi: 3635
Iscritto: 24/01/2006
|
Allora ho letto un articolo: l'ultimo carattere da inserire è il carattere di controllo, calcolato con un algoritmo in funzione dei primi 15 caratteri. Supponendo di avere un array Values() di bytes contenente i valori assegnati ai posti dispari, come descritto qui http://alexandrerodichevski.chiappani.it/doc.php?n=220&lan ..., il codice vb.net che penso è questo:
Codice sorgente - presumibilmente VB.NET |
Dim Values() As Byte = {...} Dim Somma As Int16 = 0 Dim Codice As Byte Dim Controllo As Char 'Calcola la somma di tutti i caratteri da 1 a 15 For I As Byte = 0 To 14 'Calcola il codice del carattere: If Char.IsDigit(CodiceFisc(I)) Then Codice = Val(CodiceFisc(I)) Else Codice = Asc(CodiceFisc(I)) - Asc("A") End If 'Per i posti pari, aggiunge il codice If I Mod 2 = 0 Then Somma += Codice Else 'Per i posti dispari aggiunge un codice relativo 'Assegnato sulla base di Values() Somma += Values(Codice) End If Next 'Divide la somma per 26 e ne preleva il resto Somma = Somma Mod 26 'Usa il resto per convertirlo in lettera e lo mette in Controllo Controllo = Chr(Somma + Asc("A"))
|
Non l'ho provato, fammi sapere.
|
|

psycho85 (Ex-Member)
Pro
    
Messaggi: 72
Iscritto: 20/08/2006
|
provo il codice il prima possibile, sta sera ti faccio sapere....grazie per l'aiuto TOTEM...
|
|

psycho85 (Ex-Member)
Pro
    
Messaggi: 72
Iscritto: 20/08/2006
|
Allora, sono riuscito a fare tutto, ho utilizzato un procedimento strano ma funge...
Dim varCodice_Fiscale As String = lblCodice_Fiscale.Text
Dim varSomma_Dispari As Integer = 0
Dim varSomma_Pari As Integer = 0
Dim varCodice_Controllo As String = ""
Dim q As Integer
Dim w As Integer
For w = 2 To 14
'esamino caratteri pari
carattere = Mid$(varCodice_Fiscale, w, 1)
varSomma_Pari = varSomma_Pari + Lettera2Pari(carattere)
w = w + 1
Next
For q = 1 To 15
'esamino caratteri dispari
carattere = Mid$(varCodice_Fiscale, q, 1)
varSomma_Dispari = varSomma_Dispari + Lettera2Dispari(carattere)
q = q + 1
Next
Dim somma As Integer = (varSomma_Pari + varSomma_Dispari) Mod 26
Select Case somma
Case "0" : varCodice_Controllo = "A"
Case "1" : varCodice_Controllo = "B"
Case "2" : varCodice_Controllo = "C"
Case "3" : varCodice_Controllo = "D"
Case "4" : varCodice_Controllo = "E"
Case "5" : varCodice_Controllo = "F"
Case "6" : varCodice_Controllo = "G"
Case "7" : varCodice_Controllo = "H"
Case "8" : varCodice_Controllo = "I"
Case "9" : varCodice_Controllo = "J"
Case "10" : varCodice_Controllo = "K"
Case "11" : varCodice_Controllo = "L"
Case "12" : varCodice_Controllo = "M"
Case "13" : varCodice_Controllo = "N"
Case "14" : varCodice_Controllo = "O"
Case "15" : varCodice_Controllo = "P"
Case "16" : varCodice_Controllo = "Q"
Case "17" : varCodice_Controllo = "R"
Case "18" : varCodice_Controllo = "S"
Case "19" : varCodice_Controllo = "T"
Case "20" : varCodice_Controllo = "U"
Case "21" : varCodice_Controllo = "V"
Case "22" : varCodice_Controllo = "W"
Case "23" : varCodice_Controllo = "X"
Case "24" : varCodice_Controllo = "Y"
Case "25" : varCodice_Controllo = "Z"
End Select
Public Function Lettera2Dispari(ByVal carattere As String) As Integer
Dim numero As Integer
Select Case carattere
Case "0" : numero = 1
Case "1" : numero = 0
Case "2" : numero = 5
Case "3" : numero = 7
Case "4" : numero = 9
Case "5" : numero = 13
Case "6" : numero = 15
Case "7" : numero = 17
Case "8" : numero = 19
Case "9" : numero = 21
Case "A" : numero = 1
Case "B" : numero = 0
Case "C" : numero = 5
Case "D" : numero = 7
Case "E" : numero = 9
Case "F" : numero = 13
Case "G" : numero = 15
Case "H" : numero = 17
Case "I" : numero = 19
Case "J" : numero = 21
Case "K" : numero = 2
Case "L" : numero = 4
Case "M" : numero = 18
Case "N" : numero = 20
Case "O" : numero = 11
Case "P" : numero = 3
Case "Q" : numero = 6
Case "R" : numero = 8
Case "S" : numero = 12
Case "T" : numero = 14
Case "U" : numero = 16
Case "V" : numero = 10
Case "W" : numero = 22
Case "X" : numero = 25
Case "Y" : numero = 24
Case "Z" : numero = 23
End Select
Lettera2Dispari = numero
End Function
Public Function Lettera2Pari(ByVal carattere As String) As Integer
Dim numero As Integer
Select Case carattere
Case "0" : numero = 0
Case "1" : numero = 1
Case "2" : numero = 2
Case "3" : numero = 3
Case "4" : numero = 4
Case "5" : numero = 5
Case "6" : numero = 6
Case "7" : numero = 7
Case "8" : numero = 8
Case "9" : numero = 9
Case "A" : numero = 0
Case "B" : numero = 1
Case "C" : numero = 2
Case "D" : numero = 3
Case "E" : numero = 4
Case "F" : numero = 5
Case "G" : numero = 6
Case "H" : numero = 7
Case "I" : numero = 8
Case "J" : numero = 9
Case "K" : numero = 10
Case "L" : numero = 11
Case "M" : numero = 12
Case "N" : numero = 13
Case "O" : numero = 14
Case "P" : numero = 15
Case "Q" : numero = 16
Case "R" : numero = 17
Case "S" : numero = 18
Case "T" : numero = 19
Case "U" : numero = 20
Case "V" : numero = 21
Case "W" : numero = 22
Case "X" : numero = 23
Case "Y" : numero = 24
Case "Z" : numero = 25
End Select
Lettera2Pari = numero
End Function
|
|

Il Totem (Admin)
Guru^2
    
Messaggi: 3635
Iscritto: 24/01/2006
|
Hai scritto dei select chilometrici che potevano essere riassunti in due, dico due, righe di codice... L'eleganza prima di tutto, eh!
|
|