Oppure

Loading
Questo topic e' stato chiuso dal moderatore.
29/08/07 17:01
psycho85
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:
community.visual-basic.it/lucianob/articles/…

c'è il codice, ma qual'cuno sa spiegarlo bene? Non voglio copiare il codice e incollarlo nel mio programma VOGLIO CAPIRLO!!!:grr:
aaa
30/08/07 7:32
BurnOut
Ciao! Ho uno nuovo... penso il più giovane (12 anni quasi 13)...

Ho provato a copiare e incollare il codice VB.NET in visual basic 2005 express edition :rotfl: ... ma ha alcuni errori (dichiarazione array (3))...

Se vuoi guardare il mio blog... alla ricerca di qualcosa di utile

pitbullx94.spaces.live.com/
pitbullx94.spaces.live.com/

aaa
30/08/07 16:31
psycho85
Ciao, ho dato uno sguardo al tuo blog, molto carino...però non ho trovato niente che mi aiutasse a risolvere il problema :-?
aaa
01/09/07 10:24
Il Totem
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.
aaa
01/09/07 11:09
psycho85
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...

agenziaentrate.it/ilwwcm/connect/Nsi/Servizi/Codice+fiscale+-+tessera+sanitaria/Codice+fiscale/…
aaa
01/09/07 11:45
Il Totem
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 alexandrerodichevski.chiappani.it/…, il codice vb.net che penso è questo:
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.
aaa
01/09/07 12:13
psycho85
provo il codice il prima possibile, sta sera ti faccio sapere....grazie per l'aiuto TOTEM...:love:
aaa
03/09/07 16:19
psycho85
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
aaa