Calcolo codice fiscale in una query?

di il
20 risposte

Calcolo codice fiscale in una query?

Buona sera
é possibile calcolare il C.F. in una query?
se si come procedere?
Ho scaricato vari db access che calcolano tutto in una form, ma io ho bisogno di farli in una query.
Grazie...

20 Risposte

  • Re: Calcolo codice fiscale in una query?

    Realizza una funzione, con codice VBA, ove fornisci i parametri (cognome, nome, sesso, luogo e data di nascita) e produca il probabile Codice Fiscale. Dico probabile perché solo la Agenzia delle Entrate può fornire un C.F. corretto e che non sia duplicato. Quindi la funzione realizzata può essere tenuta in considerazione solo per ottenere un dato da offrire ma da validare singolarmente con l'interessato.
  • Re: Calcolo codice fiscale in una query?

    Grazie della risposta, si so benissimo che il cf deve essere validato dall'originale.
    la funzione c'é l'ho, il problema è che non so come richiamarla in un campo della query.
  • Re: Calcolo codice fiscale in una query?

    Prova a leggere questo documento
  • Re: Calcolo codice fiscale in una query?

    msantam ha scritto:


    la funzione c'é l'ho, il problema è che non so come richiamarla in un campo della query.
    Deve essere in modulo generale e definita Public.
  • Re: Calcolo codice fiscale in una query?

    Philcattivocarattere ha scritto:


    msantam ha scritto:


    la funzione c'é l'ho, il problema è che non so come richiamarla in un campo della query.
    Deve essere in modulo generale e definita Public.
    Si modulo generale, ma riesco a richiamarlo solo un campo text non associato di una maschera, ma io vorrei richiamarlo in una query in un campo non associato
  • Re: Calcolo codice fiscale in una query?

    Nella query devi inserire il richiamo alla tua funzione (che determina il probabile Codice Fiscale) fornendo i relativi parametri (che devono essere campi della tabella).
    Quindi immaginando di avere una tabella con i campi "Cognome", "Nome", "Sesso", "DataNascita", "LuogoNascita" per ottenere il relativo Codice Fiscale è sufficiente porre un campo calcolato (ad esempio "CF") che richiami la funzione (ad esempio "CodFisc") fornendo i parametri citati.
    Insomma, praticamente, qualcosa del genere:
    
    CF: CodFisc(Cognome; Nome; Sesso; DataNascita, LuogoNascita)
    
    Consiglio di approfondire l'impiego delle funzioni definite dall'utente (user definition function) nelle query:
    https://btabdevelopment.com/how-to-use-a-function-in-a-query/
    https://www.youtube.com/watch?v=xKx1WHXUqM
    https://www.youtube.com/watch?v=bXELqGp71m
  • Re: Calcolo codice fiscale in una query?

    Ci sono riuscito . L'unico problema devo mettere la provincia manualmente.. Grazie a tutti
  • Re: Calcolo codice fiscale in una query?

    Nel codice fiscale non è prevista la Provincia ma il luogo di nascita (sia esso il Comune italiano o lo Stato estero codificato).
    In ogni caso se per il calcolo del codice fiscale ti appoggi ad una tabella dei comuni italiani ove vi sia una corrispondenza fra Comune e sua Provincia è sufficiente, ad esempio, utilizzare una funzione DLookUp per ricercare il codice fornito dalla porzione del codice fiscale che fornisce il luogo (Comune o Stato) di nascita (i quattro caratteri alfanumerici, con la una prima lettera e tre cifre numeriche, nelle posizioni da 12 a 15 del codice fiscale) e farsi restituire la corrispondente Provincia.
  • Re: Calcolo codice fiscale in una query?

    Questa è la funzione
    Option Compare Database
    Option Explicit
    Function CODFISC(COGNOME, Nome, Sesso As String, Nascita As Date, Comune, Prov As String) As String

    Dim Cog1, Cog2, Cog3, Nom1, Nom2, Nom3, Ses1, Nas3, Nas5 As String, Nas1, Nas2, Nas4, C, N As Integer
    Dim Chk, LC1, LC2, CD, Pr As String, L As Integer

    GoTo INIZIO

    INIZIO:

    'Cognome
    COGNOME = StrConv(COGNOME, vbUpperCase)
    COGNOME = Trim(COGNOME)
    C = Len(COGNOME)
    Cog2 = ""

    Dim I
    'Toglie gli spazi dal cognome
    For I = 1 To C
    Cog1 = Mid(COGNOME, I, 1)
    If Cog1 = Chr(32) Then Cog1 = ""
    If Cog1 = "'" Then Cog1 = ""
    If Cog1 = "-" Then Cog1 = ""
    If Cog1 = "." Then Cog1 = ""
    If Cog1 = "À" Then Cog1 = "A"
    If Cog1 = "È" Then Cog1 = "E"
    If Cog1 = "É" Then Cog1 = "E"
    If Cog1 = "Ì" Then Cog1 = "I"
    If Cog1 = "Ò" Then Cog1 = "O"
    If Cog1 = "Ù" Then Cog1 = "U"
    Cog2 = Cog2 + Cog1
    Next I
    COGNOME = Cog2

    'estrae le consonanti
    Cog2 = ""
    For I = 1 To C
    Cog1 = Mid(COGNOME, I, 1)
    If Cog1 = "A" Then Cog1 = ""
    If Cog1 = "E" Then Cog1 = ""
    If Cog1 = "I" Then Cog1 = ""
    If Cog1 = "O" Then Cog1 = ""
    If Cog1 = "U" Then Cog1 = ""
    Cog2 = Cog2 + Cog1
    If Len(Cog2) > 2 Then I = C
    Next I

    Cog3 = Cog2

    'estrae le vocali
    Cog2 = ""
    If Len(Cog3) = 3 Then GoTo NoVocali
    For I = 1 To C
    Cog1 = Mid(COGNOME, I, 1)
    If Cog1 = "Q" Then Cog1 = ""
    If Cog1 = "W" Then Cog1 = ""
    If Cog1 = "R" Then Cog1 = ""
    If Cog1 = "T" Then Cog1 = ""
    If Cog1 = "Y" Then Cog1 = ""
    If Cog1 = "P" Then Cog1 = ""
    If Cog1 = "S" Then Cog1 = ""
    If Cog1 = "D" Then Cog1 = ""
    If Cog1 = "F" Then Cog1 = ""
    If Cog1 = "G" Then Cog1 = ""
    If Cog1 = "H" Then Cog1 = ""
    If Cog1 = "J" Then Cog1 = ""
    If Cog1 = "K" Then Cog1 = ""
    If Cog1 = "L" Then Cog1 = ""
    If Cog1 = "Z" Then Cog1 = ""
    If Cog1 = "X" Then Cog1 = ""
    If Cog1 = "C" Then Cog1 = ""
    If Cog1 = "V" Then Cog1 = ""
    If Cog1 = "B" Then Cog1 = ""
    If Cog1 = "N" Then Cog1 = ""
    If Cog1 = "M" Then Cog1 = ""
    Cog2 = Cog2 + Cog1
    If Len(Cog2) > 2 Then I = C
    Next I
    Cog3 = Cog3 + Cog2

    NoVocali:
    Cog3 = Left(Cog3, 3)
    If Len(Cog3) = 2 Then Cog3 = Cog3 + "X"
    If Len(Cog3) = 1 Then Cog3 = Cog3 + "XX"

    'Nome
    Nome = StrConv(Nome, vbUpperCase)
    Nome = Trim(Nome)
    N = Len(Nome)
    Nom2 = ""

    'Toglie gli spazi dal nome
    For I = 1 To N
    Nom1 = Mid(Nome, I, 1)
    If Nom1 = Chr(32) Then Nom1 = ""
    If Nom1 = "'" Then Nom1 = ""
    If Nom1 = "-" Then Nom1 = ""
    If Nom1 = "." Then Nom1 = ""
    If Nom1 = "À" Then Nom1 = "A"
    If Nom1 = "È" Then Nom1 = "E"
    If Nom1 = "É" Then Nom1 = "E"
    If Nom1 = "Ì" Then Nom1 = "I"
    If Nom1 = "Ò" Then Nom1 = "O"
    If Nom1 = "Ù" Then Nom1 = "U"

    Nom2 = Nom2 + Nom1
    Next I
    Nome = Nom2

    'estrae le consonanti
    Nom2 = ""
    For I = 1 To N
    Nom1 = Mid(Nome, I, 1)
    If Nom1 = "A" Then Nom1 = ""
    If Nom1 = "E" Then Nom1 = ""
    If Nom1 = "I" Then Nom1 = ""
    If Nom1 = "O" Then Nom1 = ""
    If Nom1 = "U" Then Nom1 = ""
    Nom2 = Nom2 + Nom1
    If Len(Nom2) > 3 Then I = N
    Next I
    Nom3 = Nom2

    If Len(Nom3) = 3 Then Nom3 = Nom3
    If Len(Nom3) = 4 Then Nom3 = Left(Nom3, 1) + Right(Nom3, 2)

    'estrae le vocali
    Nom2 = ""
    If Len(Nom3) = 3 Then GoTo NoVocaliNome

    For I = 1 To C
    Nom1 = Mid(Nome, I, 1)
    If Nom1 = "Q" Then Nom1 = ""
    If Nom1 = "W" Then Nom1 = ""
    If Nom1 = "R" Then Nom1 = ""
    If Nom1 = "T" Then Nom1 = ""
    If Nom1 = "Y" Then Nom1 = ""
    If Nom1 = "P" Then Nom1 = ""
    If Nom1 = "S" Then Nom1 = ""
    If Nom1 = "D" Then Nom1 = ""
    If Nom1 = "F" Then Nom1 = ""
    If Nom1 = "G" Then Nom1 = ""
    If Nom1 = "H" Then Nom1 = ""
    If Nom1 = "J" Then Nom1 = ""
    If Nom1 = "K" Then Nom1 = ""
    If Nom1 = "L" Then Nom1 = ""
    If Nom1 = "Z" Then Nom1 = ""
    If Nom1 = "X" Then Nom1 = ""
    If Nom1 = "C" Then Nom1 = ""
    If Nom1 = "V" Then Nom1 = ""
    If Nom1 = "B" Then Nom1 = ""
    If Nom1 = "N" Then Nom1 = ""
    If Nom1 = "M" Then Nom1 = ""
    Nom2 = Nom2 + Nom1
    If Len(Nom2) > 2 Then I = C
    Next I
    Nom3 = Nom3 + Nom2

    NoVocaliNome:
    Nom3 = Left(Nom3, 3)
    If Len(Nom3) = 2 Then Nom3 = Nom3 + "X"
    If Len(Nom3) = 1 Then Nom3 = Nom3 + "XX"

    'Anno di Nascita
    Nas1 = Year(Nascita)
    Nas1 = Right(Nas1, 2)

    'Lettera del Mese
    Nas2 = Month(Nascita)
    If Nas2 = 1 Then Nas3 = "A"
    If Nas2 = 2 Then Nas3 = "B"
    If Nas2 = 3 Then Nas3 = "C"
    If Nas2 = 4 Then Nas3 = "D"
    If Nas2 = 5 Then Nas3 = "E"
    If Nas2 = 6 Then Nas3 = "H"
    If Nas2 = 7 Then Nas3 = "L"
    If Nas2 = 8 Then Nas3 = "M"
    If Nas2 = 9 Then Nas3 = "P"
    If Nas2 = 10 Then Nas3 = "R"
    If Nas2 = 11 Then Nas3 = "S"
    If Nas2 = 12 Then Nas3 = "T"

    'Giorno di nascita
    Sesso = StrConv(Sesso, vbUpperCase)
    Nas4 = Day(Nascita)
    If Left(Sesso, 1) = "F" Then Nas4 = Nas4 + 40
    Nas5 = Nas4
    If Len(Nas5) = 1 Then Nas5 = "0" + Nas5

    Dim LC
    'Comune

    Comune = StrConv(Comune, vbUpperCase)
    C = Len(Comune)
    If C > 18 Then C = 18
    LC = Comune
    Prov = StrConv(Prov, vbUpperCase)
    Pr = Prov
    If Pr = "ROMA" Then Pr = "RM"
    LC2 = ""
    C = Len(Comune)
    For I = 1 To C

    LC1 = Mid(Comune, I, 1)

    If LC1 = Chr(32) Then LC1 = ""
    If LC1 = "'" Then LC1 = ""
    If LC1 = "-" Then LC1 = ""
    If LC1 = "." Then LC1 = ""
    If LC1 = "À" Then LC1 = "A"
    If LC1 = "È" Then LC1 = "E"
    If LC1 = "É" Then LC1 = "E"
    If LC1 = "Ì" Then LC1 = "I"
    If LC1 = "Ò" Then LC1 = "O"
    If LC1 = "Ù" Then LC1 = "U"
    LC2 = LC2 + LC1
    Next I

    LC = Comune

    'Tabella codici comuni

    LC1 = ""


    L = Len(Comune)

    'nel caso di città con l'apostrofo

    If LC1 = "" Then LC1 = DLookup("CodComune", "Comuni", "Comune=" & Chr(34) & LC & Chr(34))

    CD = LC1

    salto:
    If CD = "" Then CD = "####"

    'Controllo 16° carattere

    CODFISC = Cog3 + Nom3 + Nas1 + Nas3 + Nas5 + CD

    Chk = CHKFISC(CODFISC, 0)

    CODFISC = CODFISC + Chk

    If COGNOME = "" Or Nome = "" Or Sesso = "" Or Comune = "" Or Prov = "" Then CODFISC = ""

    Fine:

    End Function

    Function CHKFISC(Codice As String, S As Integer) As String

    Dim C1, C2, C3 As String, C4, C5, C6, C7, C8, K As Integer

    Codice = StrConv(Codice, vbUpperCase) 'Rende maiuscola la stringa

    K = Len(Codice) 'Nr caratteri alfanumerici codice fiscale
    C2 = ""
    If K = 16 Then C2 = Right(Codice, 1) 'Considera il 16° carattere

    If K = 16 Then K = 15

    Dim MyCheck
    MyCheck = Left(Codice, 6) Like "[A-Z][A-Z][A-Z][A-Z][A-Z][A-Z]"
    If MyCheck = False Then CHKFISC = "Sbagliato": GoTo Fine
    MyCheck = Mid(Codice, 7, 2) Like "##"
    If MyCheck = False Then CHKFISC = "Sbagliato": GoTo Fine
    MyCheck = Mid(Codice, 9, 1) Like "[A-Z]"
    If MyCheck = False Then CHKFISC = "Sbagliato": GoTo Fine
    MyCheck = Mid(Codice, 10, 2) Like "##"
    If MyCheck = False Then CHKFISC = "Sbagliato": GoTo Fine
    MyCheck = Mid(Codice, 12, 1) Like "[A-Z]"
    If MyCheck = False Then CHKFISC = "Sbagliato": GoTo Fine
    MyCheck = Mid(Codice, 13, 3) Like "###"
    If MyCheck = False Then CHKFISC = "Sbagliato": GoTo Fine

    If K < 15 And S <> 1 Then GoTo Fine

    Dim I

    'PARI
    C5 = 0
    For I = 2 To K Step 2
    C1 = Mid(Codice, I, 1)
    If C1 = "A" Or C1 = "0" Then C4 = 0
    If C1 = "B" Or C1 = "1" Then C4 = 1
    If C1 = "C" Or C1 = "2" Then C4 = 2
    If C1 = "D" Or C1 = "3" Then C4 = 3
    If C1 = "E" Or C1 = "4" Then C4 = 4
    If C1 = "F" Or C1 = "5" Then C4 = 5
    If C1 = "G" Or C1 = "6" Then C4 = 6
    If C1 = "H" Or C1 = "7" Then C4 = 7
    If C1 = "I" Or C1 = "8" Then C4 = 8
    If C1 = "J" Or C1 = "9" Then C4 = 9
    If C1 = "K" Then C4 = 10
    If C1 = "L" Then C4 = 11
    If C1 = "M" Then C4 = 12
    If C1 = "N" Then C4 = 13
    If C1 = "O" Then C4 = 14
    If C1 = "P" Then C4 = 15
    If C1 = "Q" Then C4 = 16
    If C1 = "R" Then C4 = 17
    If C1 = "S" Then C4 = 18
    If C1 = "T" Then C4 = 19
    If C1 = "U" Then C4 = 20
    If C1 = "V" Then C4 = 21
    If C1 = "W" Then C4 = 22
    If C1 = "X" Then C4 = 23
    If C1 = "Y" Then C4 = 24
    If C1 = "Z" Then C4 = 25
    C5 = C5 + C4
    Next I

    'DISPARI
    C6 = 0
    For I = 1 To K Step 2
    C1 = Mid(Codice, I, 1)
    If C1 = "A" Or C1 = "0" Then C4 = 1
    If C1 = "B" Or C1 = "1" Then C4 = 0
    If C1 = "C" Or C1 = "2" Then C4 = 5
    If C1 = "D" Or C1 = "3" Then C4 = 7
    If C1 = "E" Or C1 = "4" Then C4 = 9
    If C1 = "F" Or C1 = "5" Then C4 = 13
    If C1 = "G" Or C1 = "6" Then C4 = 15
    If C1 = "H" Or C1 = "7" Then C4 = 17
    If C1 = "I" Or C1 = "8" Then C4 = 19
    If C1 = "J" Or C1 = "9" Then C4 = 21
    If C1 = "K" Then C4 = 2
    If C1 = "L" Then C4 = 4
    If C1 = "M" Then C4 = 18
    If C1 = "N" Then C4 = 20
    If C1 = "O" Then C4 = 11
    If C1 = "P" Then C4 = 3
    If C1 = "Q" Then C4 = 6
    If C1 = "R" Then C4 = 8
    If C1 = "S" Then C4 = 12
    If C1 = "T" Then C4 = 14
    If C1 = "U" Then C4 = 16
    If C1 = "V" Then C4 = 10
    If C1 = "W" Then C4 = 22
    If C1 = "X" Then C4 = 25
    If C1 = "Y" Then C4 = 24
    If C1 = "Z" Then C4 = 23
    C6 = C6 + C4
    Next I

    C8 = (C5 + C6) / 26
    C7 = (C5 + C6) - (Int(C8) * 26)
    If C7 = 0 Then C3 = "A"
    If C7 = 1 Then C3 = "B"
    If C7 = 2 Then C3 = "C"
    If C7 = 3 Then C3 = "D"
    If C7 = 4 Then C3 = "E"
    If C7 = 5 Then C3 = "F"
    If C7 = 6 Then C3 = "G"
    If C7 = 7 Then C3 = "H"
    If C7 = 8 Then C3 = "I"
    If C7 = 9 Then C3 = "J"
    If C7 = 10 Then C3 = "K"
    If C7 = 11 Then C3 = "L"
    If C7 = 12 Then C3 = "M"
    If C7 = 13 Then C3 = "N"
    If C7 = 14 Then C3 = "O"
    If C7 = 15 Then C3 = "P"
    If C7 = 16 Then C3 = "Q"
    If C7 = 17 Then C3 = "R"
    If C7 = 18 Then C3 = "S"
    If C7 = 19 Then C3 = "T"
    If C7 = 20 Then C3 = "U"
    If C7 = 21 Then C3 = "V"
    If C7 = 22 Then C3 = "W"
    If C7 = 23 Then C3 = "X"
    If C7 = 24 Then C3 = "Y"
    If C7 = 25 Then C3 = "Z"

    If C2 = "" Then CHKFISC = C3
    If C2 <> "" And C3 = C2 Then CHKFISC = "Esatto"
    If C2 <> "" And C3 <> C2 Then CHKFISC = "Sbagliato"
    Fine:
    If S = 1 And CHKFISC = "Sbagliato" Then
    MsgBox ("Il Codice Fiscale è errato")
    CHKFISC = ""
    Else
    CHKFISC = CHKFISC
    End If
    If S = 1 And Len(Codice) <> 16 Then
    MsgBox ("Ricontrollare il numero dei caratteri del Codice Fiscale")
    CHKFISC = ""
    Else
    CHKFISC = CHKFISC
    End If

    If S = 1 Then CHKFISC = ""

    End Function
    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
    La tabella Comuni e così strutturata
    IDComune Comune PV REG CAP PrefTelf CodComune Cod_ISTAT

    e una tabella dei comuni e da quello che vedo sulla funzione la Prov serve a calcolare l'ultima lettera per il controllo.
    La funzione non è mia, ma funziona
  • Re: Calcolo codice fiscale in una query?

    La funzione che hai scritto è tecnicamente intrisa di sostanziali errori di ottimuzzazione... che potrebbero, se risolti, velocizzarla in modo sostanziale, soprattutto se eseguita nella query questo è importante.
    Dovresti ad esempio usare la funzione REPLACE al posto di quelle sfilze lunghissime di If...
    Come sai poi non si mettono 45 If... then se poi solo 1 alla volta si verifica... si usa la struttura if...elseif...end if

    Vedi tu...
  • Re: Calcolo codice fiscale in una query?

    La "Provincia" non entra in nessun calcolo del Codice Fiscale tanto meno nel codice di controllo finale (sedicesimo carattere).
    Basta vedere la documentazione in merito:
    https://it.wikipedia.org/wiki/Codice_fiscal
    Inoltre, Va bene che il codice non è tuo, ma dovresti comprenderlo e la "Provincia" fornita alla funzione viene gestita solo per tramutare "ROMA" in "RM" e niente più, e ciò non mi appare un algoritmo versatile per un calcolo del codice fiscale.
    Infine visto che (sempre nella funzione da te postata) viene impiegata la tabella "Comuni" con la DLookUp per determinare il "CodComune" (con le sue 4 cifre) consiglio di controllare la struttura della tabella stessa e se è presente il campo "Provincia" procedere come ho giù suggerito nel mio precedente post.
  • Re: Calcolo codice fiscale in una query?

    @Alex ha scritto:


    La funzione che hai scritto è tecnicamente intrisa di sostanziali errori di ottimuzzazione... che potrebbero, se risolti, velocizzarla in modo sostanziale, soprattutto se eseguita nella query questo è importante.
    Dovresti ad esempio usare la funzione REPLACE al posto di quelle sfilze lunghissime di If...
    Come sai poi non si mettono 45 If... then se poi solo 1 alla volta si verifica... si usa la struttura if...elseif...end if

    Vedi tu...
    Ho provato il tuo suggerimento, ma visto che sono neofita con il VBA faccio un casino e non funziona più la funzione...

    willy55 ha scritto:


    La "Provincia" non entra in nessun calcolo del Codice Fiscale tanto meno nel codice di controllo finale (sedicesimo carattere).
    Basta vedere la documentazione in merito:
    https://it.wikipedia.org/wiki/Codice_fiscal
    Inoltre, Va bene che il codice non è tuo, ma dovresti comprenderlo e la "Provincia" fornita alla funzione viene gestita solo per tramutare "ROMA" in "RM" e niente più, e ciò non mi appare un algoritmo versatile per un calcolo del codice fiscale.
    Infine visto che (sempre nella funzione da te postata) viene impiegata la tabella "Comuni" con la DLookUp per determinare il "CodComune" (con le sue 4 cifre) consiglio di controllare la struttura della tabella stessa e se è presente il campo "Provincia" procedere come ho giù suggerito nel mio precedente post.
    Forse ho risolto
    Qui ho messo la prova del db:
    https://mega.nz/file/K8hmDAja#Z2VhO9cKY-JPRwF6D53dXv0kyxnBbeAhfYzEC91sr2A
  • Re: Calcolo codice fiscale in una query?

    L'algoritmo da te impiegato ha dei buchi che possono inficiarne la validità.
    Non gestisci i Comuni che hanno una denominazione che li identifica univocamente.
    Guarda ad esempio "CALLIANO" che possiamo trovare in Provincia di Trento (TN) con CodComune="B419" oppure nella Provincia di Asti (AT) CodComune="B418".
    Altro esempio "PEGLIO" che possiamo trovare in Provincia di Como (CO) CodComune="G415" ed in Provincia di Pesaro ed Urbino (PU) CodComune="G416" ma che tu hai codificato con la vecchia definizione per Pesaro (PS).
    Evidenzio che nel calcolo del codice fiscale, viene preso sempre il primo elemento della coppia (in base all'ordine in tabella).
    La tua tabella dei Comuni non è aggiornata con le variazioni apportate nel tempo, come nuove Provincie o Comuni sottoposti a fusioni o soppressi (esistenti nel passato in riferimento alla nascita).

    https://www.istat.it/it/archivio/6789#Elencodeicomunisoppressi-1

    Ho dato una occhiata al codice VBA da te allegato ma non lo hai adattato (come ti avevo suggerito, nella funzione DLookUp) e visto l'inconveniente (della mancata identificazione nei casi multipli della denominazione del Comune) consiglio, almeno, di adattarlo applicando nel criterio di ricerca entrambi gli elementi (Comune e Provincia); giusto per fornire un suggerimento pratico, qualcosa del genere:
    
    ' Ricerca il codice Belfiore (di 4 cifre in base a Comune/Stato di nascita) comprensiva della Provincia per distinguere fra occorrenze multiple
    If LC1 = "" Then LC1 = DLookup("CodComune", "Comuni", "Comune=" & Chr(34) & LC & Chr(34) & " AND PV=" & Chr(34) & Pr & Chr(34))
    
  • Re: Calcolo codice fiscale in una query?

    Grazie tantissimo, ora faccio le modifiche che mi hai suggerito
Devi accedere o registrarti per scrivere nel forum
20 risposte