Newsgroup: it.comp.appl.access
Titolo: routine "verifica codice fiscale" non funzionante

Ciao a tutti.Sul nostro NG mi hanno gentilmente postato questa routine
per la verifica del codice fiscale.Purtroppo
mi sono accorto che non funziona (prob. sbaglio io qualche cosa).
Tale routine io la vorrei inserire nell'evento "prima di aggiornare"
del campo Codice_fiscale.Se provo ad inserirla mi si blocca dopo aver
inserito i dati.Io avrei necessita' di adattarla a questo campo con
eventuali segnalazioni di errore.
Premetto che nella form ho i campi "società" "nome" "Cognome",spesso
pero' ho dei dati con aziende dove il Cf e' uguale alla partita IVA.Al
contrario per le aziende individuali ho nome e cognome me non certo
l'età e la data di nascita.
In definitiva vorrei una routine che "verifichi" e non che "calcoli"
il CF.
Ad ogni modo di seguito vi riporto l'attuale codice che non funziona:
Public Function CheckCF(ByVal sz_Codice As String) As Integer
    Const ALF1 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    Const CIF1 = "0123456789"
    Const ALF2 = "BAKPLCQDREVOSFTGUHMINJWZYX"
    Const CIF2 = "10   2 3 4   5 6 7 8 9    "
    Dim c_Char As String * 1
    Dim c_Code As String * 1
    Dim n_Count As Integer
    Dim lcv As Integer
    '----- Start
    sz_Codice = Left(UCase(sz_Codice) + Space(16), 16)
    For lcv = 2 To 14 Step 2
        c_Char = Mid$(sz_Codice, lcv, 1)
        Select Case c_Char
            Case "0" To "9"
                n_Count = n_Count + InStr(CIF1, c_Char)
            Case "A" To "Z"
                n_Count = n_Count + InStr(ALF1, c_Char)
            End Select
    Next lcv
    For lcv = 1 To 15 Step 2
        c_Char = Mid$(sz_Codice, lcv, 1)
        Select Case c_Char
            Case "0" To "9"
                n_Count = n_Count + InStr(CIF2, c_Char)
            Case "A" To "Z"
                n_Count = n_Count + InStr(ALF2$, c_Char)
            End Select
    Next lcv
    n_Count = 1 + ((n_Count - 15) Mod 26) + 64
    c_Code = Chr$(n_Count)
    c_Char = Mid$(sz_Codice, 16, 1)
    If c_Code = c_Char Then
        CheckCF = 0
    Else
        CheckCF = n_Count
    End If
End Function
Grazie in anticipo
Dino

 il CF.
E come fa a verificarlo senza il ricalcolo?
Se vuoi assistenza usa ma mia routine (restituisce il ckdigit, se vuoi 
fare il controllo con ritorno true/false all'interno ha bisogno 
dell'aggiunta di una istruzione)
Private Function CalcolaK(pValue) As String
Dim idx As Long, i As Long, X As Long, Somma As Long, sCF As String
Dim Dispari As Variant
sCF = IIf(Len(pValue) > 15, Left(pValue, 15), pValue)
Dispari = Array(1, 0, 5, 7, 9, 13, 15, 17, 19, 21, 2, 4, 18, 20, 11, 3, 
6, 8, 12, 14, 16, 10, 22, 25, 24, 23)
For i = 1 To Len(sCF)
     X = Asc(Mid(pValue, i, 1))
     idx = IIf(X < 65, X - 48, X - 65)
     Somma = Somma + IIf(0 = i Mod 2, idx, Dispari(idx))
Next
K = Chr(Somma Mod 26 + 65)
CalcolaK = K
End Function
--
ac


wrote:

Ciao e grazie per la risposta.L'istruzione If (per il true/false) dove
la metteresti???'
Dino
NB:Va bene secondo te' inserire questa funzione nell'evento "prima di
aggiornare" del campo "Codice:fiscale"????
Grazie ancora
Dino

 aggiornare" del campo "Codice:fiscale"????
si
--
ac

 - Mostra testo citato -
Ciao e grazie per la risposta.Ho provato ad adattarla ma non
funziona.D iseguito ti riporto la funzione che ho inserito nell'evento
del campo "codice_fiscale" prima di aggiornare:
Private Sub Codice_fiscale_BeforeUpdate(Cancel As Integer)
'Private Function CalcolaK(pValue) As String
Dim CalcolaK As String
Dim idx As Long, i As Long, X As Long, Somma As Long, sCF As String
Dim Dispari As Variant
sCF = IIf(Len(pValue) > 15, UCase(Left(pValue, 15)), pValue)
Dispari = Array(1, 0, 5, 7, 9, 13, 15, 17, 19, 21, 2, 4, 18, 20, 11,
3, 6, 8, 12, 14, 16, 10, 22, 25, 24, 23)
For i = 1 To Len(sCF)
     X = Asc(Mid(pValue, i, 1))
     idx = IIf(X < 65, X - 48, X - 65)
     Somma = Somma + IIf(0 = i Mod 2, idx, Dispari(idx))
Next
K = Chr(Somma Mod 26 + 65)
CalcolaK = IIf(K = UCase(Right(pValue, 1)), True, False)
'End Function
End Sub
non succede nulla posso inserire valori sbagliati ma non mi da nessuna
segnalazione.
Dover ho sbaglaito???
Dino

Dino ha scritto:

In che senso?
La richiami in questo modo?
if not calcolak(codiceFiscale) then
	msgbox "Codice Fiscale Errato"
	cancel = true
endif
--
ac

 Dino
-- 
Ciao
Geppo 

 Geppo
Geppo ciao e grazie per la risposta.Sono stato in giro per lavoro.In
questi giorni provo e poi ti faccio sapere.
Dino