Newsgroup: it.comp.appl.access
Titolo: Controllo Codice Fiscale... come??

salve... già in qualche post si era parlato di questo...
ma non sono riuscito a risolvere il problema...
posseggo già una tabella con 11.000 codici fiscali
e vorrei controllarli...ho copiato-incollato in un modulo la
funzione di Federico Luciani...
questa.....
Public Function CheckCodFiscale(CFis As String) As Boolean
    'Autore: Federico Luciani
    'Accetta: CFis = Codice fiscale da verificare
    'Restituisce: true se il Codice fiscale è corretto
    If Len(CFis) <> 16 Then
       CheckCodFiscale = False
       Exit Function
    End If
    Dim i As Integer, p As Integer, d As Integer
    Dim SumDisp As Integer, SumPari As Integer
    Dim SumTot As Integer, Check As String
    Dim Resto(1 To 26) As String
    Resto(1) = "A"
    Resto(2) = "B"
----------
etc.etc...mi potete dire come devo creare la query...
di cui accludo il codice Sql...
SELECT Anagrafe.Cognome, Anagrafe.Nome, Anagrafe.Codice_Fiscale,
Anagrafe.Sesso, Anagrafe.Nascita, Anagrafe.Comune_Nascita,
Anagrafe.Comune_Residenza, Anagrafe.des_nascita, Anagrafe.des_residenza,
Anagrafe.cap
FROM Anagrafe;
affinchè
mi controlli tutti i codici fiscali ???
Grazie...mille

 mi controlli tutti i codici fiscali ???
 che cosa intendi  per "vorrei controllarli"
Vuoi che Acces ti avvisa se ne trova uno non corretto o vuoi ricalcolarli
exnovo?
Ciao NSantini

 exnovo?
scusa se mi intrometto ma la cosa interessa molto anche me...
io vorrei ricalcolarli ex novo...

 ha scritto nel
messaggio news:agttnl$qi3$1...@lacerta.tiscalinet.it...

Sul sito comune ci dovrebbe essere, ma ieri sera non sono riuscito a
reperirla, una routine che inserita in un tuo database con gli opportuni
aggiustamenti calcola di codice fiscale. Se riesci a reperirla bene
altrimenti ne riparliamo...
Ciao
NSantini

 altrimenti ne riparliamo...
si, quella l'ho presa ma mi mancano le conoscenze su come fare update sui
miei record mediante quel programma.

 ha scritto nel messaggio
news:WHbY8.77557$vm5.2...@news2.tin.it...

----------------------
Se fosse possibile si...
magari in un campo della query mi indicasse
quale CF è scorretto e poi in seguito provare
a ricalcolarlo...
Ciao...

 ha scritto nel
messaggio news:agu604$v08$1...@lacerta.tiscalinet.it...

Bene, in quella routine (mi dici in quale sezione l'hai reperita?) individua
i riferimenti ai campi del cognome, del nome, della data di nscita, del
luogo di nascita e del sesso. Modificali trascrivendo i nomi dei campi della
tua tabella. Poi assicurati di avere anche la tabella dei comuni con i
relativi codici (più di 8000 record) e poi scegli l'evento più confacente
alle tue esigenze (Su attivato, Su clic, Su doppio clic, Su modifica) per il
controllo che ospiterà il codice fiscale e in quell'evento piazzerai la
routine.
In pratica:
-- l'evento richiamerà la funzione alla quale passerai....
-- oppure la funzione andrà a leggere con: variabilecognome =
Me.CampoCognome e così per il nome, la data di nascita il sesso, il campo
città ti dovrà fornire invece il corrispondente codice
-- impostate tutte le variabili si passa a delle subroutine che ti calcolano
i caratteri del cognome, poi del nome .. fino a costituire la stringa di 15
caratteri che...
-- farai analizzare da una rotine finale per il calcolo del carattere di
controllo
-- concatena anche questo carattere alla precedente stringa e avrai il
codice fiscale
Provaci non è difficile, specie se mastichi un po' di Basic!
Sono sempre disponibile ad aiutarti. Ciao
NSantini

 Bene, in quella routine (mi dici in quale sezione l'hai reperita?)
individua
l'ho trovata qui:
http://www.sitocomune.com/general/general074.htm
grazie per le info, vado a provare!

On Sat, 13 Jul 2002 16:24:40 GMT, "SuperPippo®"
<ik0qd...@SPAMlibero.it> wrote:
ricordatevi dei codici fiscali doppi riassegnati dal Ministero delle
finanze (dovete chiedere all'interessato prima di modificare)
Saluti.
Emanuele.

 ha scritto nel messaggio
news:8nv9juo4gq1be5hdm...@4ax.com...

------------
ok... grazie Emyr...ma.. purtroppo nessuno ha risposto ancora alla
mia domanda...riguardo come fare per controllare una serie di CF
in una tabella...dopo aver copiato-incollato in un modulo il codice
di Federico Luciani...
mi piacerebbe che li controllasse e quelli che sono considerati errati
li mettesse in un campo a fianco... è possibile farlo ??
se è complicato... Stop...
Ciao...



dunque nella query crei un campo del tipo
corretto: CheckCodFiscale(nomecampocodicefiscale)
nei criteri sotto metti falso
questo ti mostra l'elenco dei codici fiscali errati
si può mettere anche a fianco ma non penso ti servirebbe
Saluti.
Emanuele.

 ha scritto nel messaggio
news:88jcju0mjon5jsud2...@4ax.com...

---------------
grazie Emyr... domani provo... vediamo se ci riesco...poi faccio sapere...
Ciao...

 ha scritto nel
messaggio news:ah19sv$gkj$1...@lacerta.tiscalinet.it...

Avevo già visionato quella routine, avevo anche segnalato che c'è un errore,
ma a quanto pare l'autore non l'ha ancora corretto.
L'errore si verifica quando si inseriscono cognomi (o anche nomi) brevi e
con lettere accentate: Alì, Buè, Foà, ecc. (non mi vengono nomi con
lettera accentata) in questo caso quando il For... Next scandisce i
caratteri del cognome (o del nome) arrivato alla lettera accentata non la
considera né consonante né vocale e la salta. Per i cognomi più lunghi come
Cassarà, Buccè il problema non si pone, ma per Alì il corretto risultato è
LAI e invece dà LAX sbagliato. In verità il DM 23/12/76 non fa assoluta
menzione
di caratteri accentati e questo potrebbe generare qualche dubbio, ma credo
che una vocale accentata è pur sempre una vocale!
Bene, passiamo alla routine. Io nel mio DB ho risolto così:
Private Sub cfctr_GotFocus()
Dim cog As String
Dim nom As String
Dim sex As String
Dim nat As Date
Dim cod As String
Dim contr As String
Dim nattxt As String
cog = UCase(Me.cognome)
nom = UCase(Me.nome)
sex = UCase(Me.sesso)
nat = Me.natil
cod = Me.città.Column(2)
'elabora il cognome
nominativo cog, True 'flag true= cognome
'elabora il nome
nominativo nom, False ' flag false= no cognome
'elabora data e sesso
elabdata nat, sex, nattxt
'elabora lettera di controllo
contr = cog & nom & nattxt & cod
letterctrl contr
'il codice fiscale è calcolato e lo trascrivo nel controllo
Me.cfctr = cog & nom & nattxt & cod & contr
End Sub
Private Sub nominativo(testo As String, flag As Boolean)
noaccenti testo 'trasforma vocali accentate
Dim L As Integer
Dim i As Integer
Dim ch As String
Dim vc As Integer
Dim vocale As String
Dim consonante As String
  L = Len(testo)
  For i = 1 To L  'ciclo di scansione che separa le vocali dalle consonanti
    ch = Mid(testo, i, 1)
    vc = InStr("AEIOU", ch)
    If vc Then vocale = vocale + ch Else consonante = consonante + ch
  Next
  If Len(consonante) > 3 Then
        If flag Then testo = Left(consonante, 3) Else testo =
Left(consonante, 1) & Mid(consonante, 3, 2)
    Else
        testo = Left(consonante + vocale + "XXX", 3)
  End If
End Sub
Private Sub noaccenti(testo As String)
Dim strTemp As String
Dim i As Integer
Dim L As Integer
Dim ch As String
strTemp = "": L = Len(testo)
    For i = 1 To L
        ch = Mid(testo, i, 1)
        If ch >= "À" And ch <= "Å" Then ch = "A"
        If ch >= "È" And ch <= "Ë" Then ch = "E"
        If ch >= "Ì" And ch <= "Ï" Then ch = "I"
        If ch >= "Ò" And ch <= "Ö" Then ch = "O"
        If ch$ >= "Ù" And ch <= "Ü" Then ch = "U"
        strTemp = strTemp + ch
    Next
testo = strTemp
End Sub
Private Sub elabdata(nato As Date, sx As String, natotxt As String)
Dim anno As String
Dim mese As String
Dim giorno As String
' ricavo ultime due cifre dell'anno di nascita
anno = Right(Str(Year(nato)), 2)
'ricavo la lettera del mese
mese = Mid("ABCDEHLMPRST", Month(nato), 1)
'ricavo il giorno tenendo conto del sesso
giorno = Right("00" & Mid(Str(Day(nato) - 40 * (sx = "F")), 2), 2)
'concateno
natotxt = anno & mese & giorno
End Sub
Sub letterctrl(strCF As String)
Dim strDisp As String
Dim i As Integer
Dim ch As Integer
Dim v As Integer
Dim tot As Integer
strDisp = "0100050709131517192102041820110306081214161022252423"
'scansione dei 15 caratteri
For i = 1 To 15
    ch = Asc(Mid(strCF, i, 1))
    v = ch + 65 * (ch > 64 And ch < 91) + 48 * (ch > 47 And ch < 58)
    If i Mod 2 = 0 Then tot = tot + v Else tot = tot + Val(Mid(strDisp, v *
2 + 1, 2))
Next
 strCF = Chr(tot Mod 26 + 65)
End Sub
con gli opportuni aggiustamenti per il tuo DB potrebbe funzionare. Saluti
NSantini

"SuperPippo®" <ik0qd...@SPAMlibero.it> ha scritto nel messaggio
news:VFXZ8.6030$s74.1...@twister1.libero.it...

---------------------------
Ciao Emyr.. ho provato a fare la query... ed intanto ti dico che non
so se devo farla con tutti i campi interessati  al calcolo del CF
oppure no...
CMQ ho provato in entrambe le maniere e mi dice sempre
"Funzione "CheckCodFiscale" non definita nell'espressione..
allego il cod Sql..
SELECT CheckCodFiscale([Codice_Fiscale]) AS Espr1, Anagrafe.Cognome,
Anagrafe.Nome, Anagrafe.Sesso, Anagrafe.Nascita, Anagrafe.des_nascita
FROM Anagrafe
WHERE (((CheckCodFiscale([Codice_Fiscale]))=False));


hai copiato la funzione in un modulo nella sezione moduli di access?
il campo nella tabella, si chiama codice fiscale?
devi sistemare la funzione per il controllo delle vocali accentate e
per passargli o fargli vedere i campi della tabella per fare il
controllo...
Saluti.
Emanuele.

 Saluti. Emanuele
quest'ultima non l'ho capita...:o)))
Ciao...

Ciao...
facevo riferimento al messaggio di Santini
Saluti.
Emanuele.

 Ciao...
dai un'occhiata al mio post precedente, ho messo tutta la routin per il
calcolo del codice fiscale.
I riferimenti ai campi del tuo DB li devi aggiustare opportunamente... ho
inserito anche la routine per il controllo delle vocali accentate. Buon
Lavoro
NSantini

 NSantini
--------------------->
scusa.. ma credo che ci stiamo capendo male...
a me non serve la routine x il calcolo del CF..
già la ho ed ho già fatto alcuni db con queste routine...
a me quello che serviva è di fare un controllo di CF
già esistenti in un certo Db con la routine di Federico Luciani...
ho già copiato-incollato il codice in un Modulo..
chiamato CheckCodFiscale... ma mi sono arenato sulla
query... consigli ???
Ciao...