Newsgroup: it.comp.lang.visual-basic
Titolo: Codice Fiscale

Cerco una funzione o anche una spiegazione di come calcolare il codice
fiscale (non il Check Digit, quella funzione già l'ho sviluppata) ma come
dal nome e il cognome estrapolare i primi 6 caratteri .
Grazie anticipate Dario

Ho visto il sorgente da qualche parte sulla rete, ma non ricordo
l'indirizzo.
Prova a cercare su Altavista con
VB+Fiscale
o
VB+Tips+Fiscale
Fabio

...


 poi si prende la prima vocale o le prime due vocali del cognome.
 e Carlo Bo o Dario Fo?
...forse si mette zero...

Silvio ha scritto nel messaggio <01bda5cf$4fa57a20$2350bfc3@pa1028>...

No, scusate, ero sicuro di averlo scritto: in caso di cognomi con due
lettere si aggiunge una X: Bo di venta BOX e Fo diventa FOX. Per cui il
codice fiscale di Carlo Bo inizia con BOX CRL......,
mentre quello di Dario Fo inizia con: FOX DRA.
Saluti,
Domenico

mentre quello di Dario Fo inizia con: FOX DRA.
Quindi l'Agente Fox Molder e' in realta' parente di Dario Fo(x) sotto
mentite spoglie!!!
Lo sospettavo... :)

dal nome e il cognome estrapolare i primi 6 caratteri .
Eccoti tutta la routine, bella e completa. L'ho appena finita [non sono un
fesso: serviva anche a me :-)]. Prego gli altri di controllare se e' esatta
e se non ci sia qualche modo per "accorciarla". Manca solo la parte sul
codice della localita'. Qualcuno di voi sa se si puo' trovare in giro
l'elenco delle citta' (magari in mdb). Sarebbe un incubo dover ricopiarli
tutti!
Private Sub CalcoloCodFis()
Dim Temp, Vocali As String
Dim I, TempNum As Integer
Temp = ""
TxtCodFis = ""
Vocali = ""
'Cognome (123)
Temp = StrConv(TxtCognome, vbUpperCase)
For I = 1 To Len(Temp)
'A=65, E=69, I=73,O=79,U=85, ''=32
If Asc(Mid(Temp, I, 1)) <> 65 And _
   Asc(Mid(Temp, I, 1)) <> 69 And _
   Asc(Mid(Temp, I, 1)) <> 73 And _
   Asc(Mid(Temp, I, 1)) <> 79 And _
   Asc(Mid(Temp, I, 1)) <> 85 And _
   Asc(Mid(Temp, I, 1)) <> 32 Then
        TxtCodFis = TxtCodFis + Mid(Temp, I, 1)
Else
        Vocali = Vocali + Mid(Temp, I, 1)
End If
   If Len(TxtCodFis) = 3 Then Exit For
Next
If Len(TxtCodFis) < 3 Then TxtCodFis = TxtCodFis + Left(Vocali, 3 -
Len(TxtCodFis))
If Len(TxtCodFis) < 3 Then TxtCodFis = TxtCodFis + String(3 -
Len(TxtCodFis), "X")
'Nome (456)
Vocali = ""
Temp = StrConv(TxtNome, vbUpperCase)
TempNum = 0 'Numero di consonanti
For I = 1 To Len(Temp)
'A=65, E=69, I=73,O=79,U=85, ''=32
If Asc(Mid(Temp, I, 1)) <> 65 And _
   Asc(Mid(Temp, I, 1)) <> 69 And _
   Asc(Mid(Temp, I, 1)) <> 73 And _
   Asc(Mid(Temp, I, 1)) <> 79 And _
   Asc(Mid(Temp, I, 1)) <> 85 And _
   Asc(Mid(Temp, I, 1)) <> 32 Then
        TempNum = TempNum + 1
        If TempNum = 1 Or TempNum = 3 Or TempNum = 4 Then
            TxtCodFis = TxtCodFis + Mid(Temp, I, 1)
        End If
Else
        Vocali = Vocali + Mid(Temp, I, 1)
End If
   If Len(TxtCodFis) = 6 Then Exit For
Next
If Len(TxtCodFis) < 6 Then
    TxtCodFis = Left(TxtCodFis, 3)
    Temp = StrConv(TxtNome, vbUpperCase)
    TempNum = 0
    For I = 1 To Len(Temp)
    'A=65, E=69, I=73,O=79,U=85, ''=32
    If Asc(Mid(Temp, I, 1)) <> 65 And _
       Asc(Mid(Temp, I, 1)) <> 69 And _
       Asc(Mid(Temp, I, 1)) <> 73 And _
       Asc(Mid(Temp, I, 1)) <> 79 And _
       Asc(Mid(Temp, I, 1)) <> 85 And _
       Asc(Mid(Temp, I, 1)) <> 32 Then
            TxtCodFis = TxtCodFis + Mid(Temp, I, 1)
    End If
    If Len(TxtCodFis) = 6 Then Exit For
    Next
End If
If Len(TxtCodFis) < 6 Then TxtCodFis = TxtCodFis + Left(Vocali, 6 -
Len(TxtCodFis))
'Anno di nascita (78)
TxtCodFis = TxtCodFis + Right(TxtNatoAnno, 2)
'Mese di nascita(9)
Select Case Val(TxtNatoMese)
Case 1  'Gennaio=A
    TxtCodFis = TxtCodFis + "A"
Case 2  'Febbraio = B
    TxtCodFis = TxtCodFis + "B"
Case 3  'Marzo = C
    TxtCodFis = TxtCodFis + "C"
Case 4  'Aprile = D
    TxtCodFis = TxtCodFis + "D"
Case 5  'Maggio = E
    TxtCodFis = TxtCodFis + "E"
Case 6  'Giugno = H
    TxtCodFis = TxtCodFis + "H"
Case 7  'Luglio = L
    TxtCodFis = TxtCodFis + "L"
Case 8  'Agosto = M
    TxtCodFis = TxtCodFis + "M"
Case 9  'Settembre = P
    TxtCodFis = TxtCodFis + "P"
Case 10 'Ottobre = R
    TxtCodFis = TxtCodFis + "R"
Case 11 'Novembre = S
    TxtCodFis = TxtCodFis + "S"
Case 12 'Dicembre = T
    TxtCodFis = TxtCodFis + "T"
End Select
'Giorno di nascita(0A)
Temp = TxtNatoGiorno
If Len(Temp) = 1 Then Temp = "0" + Temp
If CmbSesso = "F" Then Temp = Str(Val(Temp) + 40)
TxtCodFis = TxtCodFis + Temp
'Località di nascita (BCDE)
TxtCodFis = TxtCodFis + "XXXX" 'Vedi sopra
'Ultima lettera (F)
TempNum = 0
For I = 2 To 14 Step 2 'Controllo caratteri pari
    Select Case Mid(TxtCodFis, I, 1)
    Case "A", "0"
        TempNum = TempNum + 0
    Case "B", "1"
        TempNum = TempNum + 1
    Case "C", "2"
        TempNum = TempNum + 2
    Case "D", "3"
        TempNum = TempNum + 3
    Case "E", "4"
        TempNum = TempNum + 4
    Case "F", "5"
        TempNum = TempNum + 5
    Case "G", "6"
        TempNum = TempNum + 6
    Case "H", "7"
        TempNum = TempNum + 7
    Case "I", "8"
        TempNum = TempNum + 8
    Case "J", "9"
        TempNum = TempNum + 9
    Case "K"
        TempNum = TempNum + 10
    Case "L"
        TempNum = TempNum + 11
    Case "M"
        TempNum = TempNum + 12
    Case "N"
        TempNum = TempNum + 13
    Case "O"
        TempNum = TempNum + 14
    Case "P"
        TempNum = TempNum + 15
    Case "Q"
        TempNum = TempNum + 16
    Case "R"
        TempNum = TempNum + 17
    Case "S"
        TempNum = TempNum + 18
    Case "T"
        TempNum = TempNum + 19
    Case "U"
        TempNum = TempNum + 20
    Case "V"
        TempNum = TempNum + 21
    Case "W"
        TempNum = TempNum + 22
    Case "X"
        TempNum = TempNum + 23
    Case "Y"
        TempNum = TempNum + 24
    Case "Z"
        TempNum = TempNum + 25
    End Select
Next
For I = 1 To 15 Step 2 'Controllo caratteri dispari
    Select Case Mid(TxtCodFis, I, 1)
    Case "A", "0"
        TempNum = TempNum + 1
    Case "B", "1"
        TempNum = TempNum + 0
    Case "C", "2"
        TempNum = TempNum + 5
    Case "D", "3"
        TempNum = TempNum + 7
    Case "E", "4"
        TempNum = TempNum + 9
    Case "F", "5"
        TempNum = TempNum + 13
    Case "G", "6"
        TempNum = TempNum + 15
    Case "H", "7"
        TempNum = TempNum + 17
    Case "I", "8"
        TempNum = TempNum + 19
    Case "J", "9"
        TempNum = TempNum + 21
    Case "K"
        TempNum = TempNum + 2
    Case "L"
        TempNum = TempNum + 4
    Case "M"
        TempNum = TempNum + 18
    Case "N"
        TempNum = TempNum + 20
    Case "O"
        TempNum = TempNum + 11
    Case "P"
        TempNum = TempNum + 3
    Case "Q"
        TempNum = TempNum + 6
    Case "R"
        TempNum = TempNum + 8
    Case "S"
        TempNum = TempNum + 12
    Case "T"
        TempNum = TempNum + 15
    Case "U"
        TempNum = TempNum + 16
    Case "V"
        TempNum = TempNum + 10
    Case "W"
        TempNum = TempNum + 22
    Case "X"
        TempNum = TempNum + 25
    Case "Y"
        TempNum = TempNum + 24
    Case "Z"
        TempNum = TempNum + 23
    End Select
Next
TempNum = TempNum Mod 26
Select Case TempNum
Case 0
    TxtCodFis = TxtCodFis + "A"
Case 1
    TxtCodFis = TxtCodFis + "B"
Case 2
    TxtCodFis = TxtCodFis + "C"
Case 3
    TxtCodFis = TxtCodFis + "D"
Case 4
    TxtCodFis = TxtCodFis + "E"
Case 5
    TxtCodFis = TxtCodFis + "F"
Case 6
    TxtCodFis = TxtCodFis + "G"
Case 7
    TxtCodFis = TxtCodFis + "H"
Case 8
    TxtCodFis = TxtCodFis + "I"
Case 9
    TxtCodFis = TxtCodFis + "J"
Case 10
    TxtCodFis = TxtCodFis + "K"
Case 11
    TxtCodFis = TxtCodFis + "L"
Case 12
    TxtCodFis = TxtCodFis + "M"
Case 13
    TxtCodFis = TxtCodFis + "N"
Case 14
    TxtCodFis = TxtCodFis + "O"
Case 15
    TxtCodFis = TxtCodFis + "P"
Case 16
    TxtCodFis = TxtCodFis + "Q"
Case 17
    TxtCodFis = TxtCodFis + "R"
Case 18
    TxtCodFis = TxtCodFis + "S"
Case 19
    TxtCodFis = TxtCodFis + "T"
Case 20
    TxtCodFis = TxtCodFis + "U"
Case 21
    TxtCodFis = TxtCodFis + "V"
Case 22
    TxtCodFis = TxtCodFis + "W"
Case 23
    TxtCodFis = TxtCodFis + "X"
Case 24
    TxtCodFis = TxtCodFis + "Y"
Case 25
    TxtCodFis = TxtCodFis + "Z"
End Select
End Sub
Ciao!
--
Marco Vincenzo Carnazzo
http://www.geocities.com/SouthBeach/Marina/9922/
 (Ancora per poco)
http://members.xoom.com/mcarnazzo/
 (In costruzione)
"Sara' perche' i poeti guardano spesso le nuvole che sono i primi ad
avvertire la tempesta" - Bisca 99 Posse

 tutti!
Vai sul sito comune, che lo trovi!!!!!  (.dbf ma lo puoi convertire facilmente)
-- 
Hi, Ciao
Ettore                 By -MES-
http://www.aspide.it/freeweb/ilmes
Il sito comune di programmatori VB
http://members.xoom.com/it_lang_vb

 
Non e' l'unico errore!
ATTENZIONE, ATTENZIONE, A CHI HA MESSO IN PRATICA L'ALGORITMO,
Nella tabella di conversione per il calcolo del check-digit delle cifre dispari,
il buon Domenico ha erroneamente trascritto T=15 anzicche' T=14!
Quindi:

T=14      (E NON 15)
U=16
V=10
W=22
X=25
Y=24
Z=23


Ettore ha perfettamente ragione. Si è trattato di un errore di trascrizione.
Fortunatamente la mia applicazione per il calcolo del codice fiscale
conteneva già la versione corretta. Invece, quando ho ripreso le tabelle
allegate alla legge per ricopiarle ho fatto l'errore che Ettore ha
sottolineato. Poi ho ricontrollato e per tutto il resto pare che tutto
funzioni.
Saluti a tutti,
Domenico
Ettore Maronese ha scritto nel messaggio <01bdaab7$81d503c0$64c0c0c0@mes>...





Len(TxtCodFis))
come mai questi due passaggi mi vengono segnati in rosso?
Aranar
_________________________
http://www.nettaxi.com/citizens/Aranar
   (above all VgaPlanets)
http://www.tempolibero.com/user/aranar
   (sopratutto VgaPlanets)

 ...
Ok, adesso abbiamo anche questo algoritmo  :-))))


tutti!
io ho preso il file .DBF presente sul sito comune ma il mio access non
lo identifica. Qualcuno sarebbe cosi' gentile da convertirlo in
formato access ed inviarmelo ad 
ara...@usa.net
?
grazie!


 
Questo per insegnarti ad usare le tabelle attaccate.
Apri access.
Crea un DB nuovo.
Cerca nei menu' la voce 
	Access 2 (Inglese)
		"File->Attach Table"
	Access 97 (Italiano)
		"File->Carica dati esterni->Collega tabelle"
E allega il database DBF al database access.
A questo punto puoi copiarti i dati nel tuo DB, o lasciarlo come tabella allegata.
In qualsiasi caso ti invio il file convertito per Access 2.


 
http://www.tempolibero.com/user/aranar
   (sopratutto VgaPlanets)
Ho constatato anchio che il file incriminato è in formato .dbf ma se hai
acces 97 non c'è nulla di più semplice per convertirlo, basta creare un
nuovo database, quindi selezionare la voce Carica Dati Esterni>Importa
del menù file, ti cerchi il file .dbf e in automatico l'acces ti crea
una bella tabella con tutti i codici e i comuni! Io almeno ho fatto
così, spero di esserti stato utile!
Ciao!
-- 
 _____________________________________________________________________
 See now the Sinkha power
 MailMe: 
reveng...@pn.itnet.it
 Visit here 
http://www.geocities.com/area51/dimension/9972
 _____________________________________________________________________
|                                                                     |
|               _\\\///_                                              |
|             _/        \_                                            |
|           /  __      __  \           The trust is out there         |
|           | /  \    /  \ |                                          |
|           \ \___\  /___/ /                 TrustNo1                 |
|            \_    ..    _/                                           |
|              \   __   /                     Leo2012                 |
|               \______/                                              |
|        o000o           o000o                                        |
|________°000°___________°000°________________________________________|

come mai questi due passaggi mi vengono segnati in rosso?
Credo perche' il newsreader mette Len(TxtCodFis)) a capo, mentre nel codice
VB deve andare nella stessa riga dell'If.
Ciao.
--
Marco Vincenzo Carnazzo
http://members.xoom.com/mcarnazzo/
"Recentemente ho letto la Bibbia. Non male, ma il personaggio principale e'
poco credibile" - Woody Allen

 >tutti!
Scusatemi l'intrusione, sono un nuovo "navigatore" di questo NG e me ne pento,
se lo avessi sottoscritto prima avrei potuto (forse) darvi una mano.
Realizzo programmi in VB da circa 3 anni ed ho creato più di 15 versioni di
programmi per codici fiscali.
Una sola cosa non è mai cambiata, il file dove, 3 anni fà, avevo inserito
tutti i comuni (circa 8000 se non sbaglio).
Il file è costituito da un semplicissimo "database" (lo chiamo così anche se
database non è) che ho creato come file ad accesso casuale (GET e PUT forever)
comunque, se la richiesta è ancora attiva, non ho problemi ad inviarvelo via
mail (sono quasi 448 Kbyte) ... basta chiedere (in email please non in gruppo)
...
REO