Convalida Codice Fiscale

Anonimo
2012-02-05T19:16:45+00:00

Devo convalidare un Codice Fiscale.

Attualmente uso queste 2 formule 

( si tratta di una unica formula spezzata in 2 perche il testo era troppo lungo )

___________________________________________________________________________________________

=IIf(Mid([FoCf];1;1) In ("a";"b";"c";"d";"e";"f";"g";"h";"i";"j";"k";"l";"m";"n";"o";"p";"q";"r";"s";"t";"u";"v";"w";"x";"y";"z");0;1)

+IIf(Mid([FoCf];2;1) In ("a";"b";"c";"d";"e";"f";"g";"h";"i";"j";"k";"l";"m";"n";"o";"p";"q";"r";"s";"t";"u";"v";"w";"x";"y";"z");0;1)

+IIf(Mid([FoCf];3;1) In ("a";"b";"c";"d";"e";"f";"g";"h";"i";"j";"k";"l";"m";"n";"o";"p";"q";"r";"s";"t";"u";"v";"w";"x";"y";"z");0;1)

+IIf(Mid([FoCf];4;1) In ("a";"b";"c";"d";"e";"f";"g";"h";"i";"j";"k";"l";"m";"n";"o";"p";"q";"r";"s";"t";"u";"v";"w";"x";"y";"z");0;1)

+IIf(Mid([FoCf];5;1) In ("a";"b";"c";"d";"e";"f";"g";"h";"i";"j";"k";"l";"m";"n";"o";"p";"q";"r";"s";"t";"u";"v";"w";"x";"y";"z");0;1)

+IIf(Mid([FoCf];6;1) In ("a";"b";"c";"d";"e";"f";"g";"h";"i";"j";"k";"l";"m";"n";"o";"p";"q";"r";"s";"t";"u";"v";"w";"x";"y";"z");0;1)

+IIf(Mid([FoCf];7;1) In ("0";"1";"2";"3";"4";"5";"6";"7";"8";"9");0;1)

+IIf(Mid([FoCf];8;1) In ("0";"1";"2";"3";"4";"5";"6";"7";"8";"9");0;1)

___________________________________________________________________________________________

=IIf(Mid([FoCf];9;1) In ("a";"b";"c";"d";"e";"f";"g";"h";"i";"j";"k";"l";"m";"n";"o";"p";"q";"r";"s";"t";"u";"v";"w";"x";"y";"z");0;1)

+IIf(Mid([FoCf];10;1) In ("0";"1";"2";"3";"4";"5";"6";"7";"8";"9");0;1)

+IIf(Mid([FoCf];11;1) In ("0";"1";"2";"3";"4";"5";"6";"7";"8";"9");0;1)

+IIf(Mid([FoCf];12;1) In ("a";"b";"c";"d";"e";"f";"g";"h";"i";"j";"k";"l";"m";"n";"o";"p";"q";"r";"s";"t";"u";"v";"w";"x";"y";"z");0;1)

+IIf(Mid([FoCf];13;1) In ("0";"1";"2";"3";"4";"5";"6";"7";"8";"9");0;1)

+IIf(Mid([FoCf];14;1) In ("0";"1";"2";"3";"4";"5";"6";"7";"8";"9");0;1)

+IIf(Mid([FoCf];15;1) In ("0";"1";"2";"3";"4";"5";"6";"7";"8";"9");0;1)

+IIf(Mid([FoCf];16;1) In ("a";"b";"c";"d";"e";"f";"g";"h";"i";"j";"k";"l";"m";"n";"o";"p";"q";"r";"s";"t";"u";"v";"w";"x";"y";"z");0;1)

____________________________________________________________________________________________

( Quando le ho fatte anni fa mi sembravano il massimo ma oggi

mi viene da sorridere a vederle  )

in pratica controllo 1 per 1 i 16 caratteri verificando che siano lettere o numeri 

Come posso migliorare questo marchingegno ????

Grazie

Microsoft 365 e Office | Access | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

Risposta accettata dall'autore della domanda

Anonimo
2012-02-06T09:01:17+00:00

Ciao,

anche per il codice fiscale c'è una bella funzioncina che fa il controllo formale di correttezza:

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"

    Resto(3) = "C"

    Resto(4) = "D"

    Resto(5) = "E"

    Resto(6) = "F"

    Resto(7) = "G"

    Resto(8) = "H"

    Resto(9) = "I"

    Resto(10) = "J"

    Resto(11) = "K"

    Resto(12) = "L"

    Resto(13) = "M"

    Resto(14) = "N"

    Resto(15) = "O"

    Resto(16) = "P"

    Resto(17) = "Q"

    Resto(18) = "R"

    Resto(19) = "S"

    Resto(20) = "T"

    Resto(21) = "U"

    Resto(22) = "V"

    Resto(23) = "W"

    Resto(24) = "X"

    Resto(25) = "Y"

    Resto(26) = "Z"

    For i = 2 To 14 Step 2

        Select Case Mid$(CFis, i, 1)

            Case "0": p = 0

            Case "1": p = 1

            Case "2": p = 2

            Case "3": p = 3

            Case "4": p = 4

            Case "5": p = 5

            Case "6": p = 6

            Case "7": p = 7

            Case "8": p = 8

            Case "9": p = 9

            Case "A": p = 0

            Case "B": p = 1

            Case "C": p = 2

            Case "D": p = 3

            Case "E": p = 4

            Case "F": p = 5

            Case "G": p = 6

            Case "H": p = 7

            Case "I": p = 8

            Case "J": p = 9

            Case "K": p = 10

            Case "L": p = 11

            Case "M": p = 12

            Case "N": p = 13

            Case "O": p = 14

            Case "P": p = 15

            Case "Q": p = 16

            Case "R": p = 17

            Case "S": p = 18

            Case "T": p = 19

            Case "U": p = 20

            Case "V": p = 21

            Case "W": p = 22

            Case "X": p = 23

            Case "Y": p = 24

            Case "Z": p = 25

        End Select

        SumPari = SumPari + p

    Next i

    For i = 1 To 15 Step 2

        Select Case Mid$(CFis, i, 1)

            Case "0": d = 1

            Case "1": d = 0

            Case "2": d = 5

            Case "3": d = 7

            Case "4": d = 9

            Case "5": d = 13

            Case "6": d = 15

            Case "7": d = 17

            Case "8": d = 19

            Case "9": d = 21

            Case "A": d = 1

            Case "B": d = 0

            Case "C": d = 5

            Case "D": d = 7

            Case "E": d = 9

            Case "F": d = 13

            Case "G": d = 15

            Case "H": d = 17

            Case "I": d = 19

            Case "J": d = 21

            Case "K": d = 2

            Case "L": d = 4

            Case "M": d = 18

            Case "N": d = 20

            Case "O": d = 11

            Case "P": d = 3

            Case "Q": d = 6

            Case "R": d = 8

            Case "S": d = 12

            Case "T": d = 14

            Case "U": d = 16

            Case "V": d = 10

            Case "W": d = 22

            Case "X": d = 25

            Case "Y": d = 24

            Case "Z": d = 23

        End Select

        SumDisp = SumDisp + d

    Next i

    SumTot = SumPari + SumDisp

    Check = Resto((SumTot Mod 26) + 1)

    If Check = UCase$(Right(CFis, 1)) Then

       CheckCodFiscale = True

    Else

       CheckCodFiscale = False

    End If

End Function

La risposta è stata utile?

0 commenti Nessun commento

Risposta accettata dall'autore della domanda

Anonimo
2012-02-06T09:01:04+00:00

Ciao,

similmente a quanto ti ha suggerito Cinzia per il controllo della partita iva, puoi utilizzare questa funzione presente sul SitoComune (www.sitocomune.com), sezione general, faq nr. 6.35. che esegue il controllo del codice fiscale che gli passi come parametro, restituendoti true/false a secondo della sua validità.

E' importante sottolineare che il codice fiscale ufficiale è quello assegnato dall'ufficio delle entrate e che in casi di uguaglianza del codice fiscale tra 2 persone (rari ma possibili) l'ufficio delle entrate può variare il calcolo "canonico" per evitare la presenza di due codici fiscali identici.

In sostanza, quando la funzione valida positivamente il codice fiscale, significa che è corretto, nel caso in cui invece restituisca false, anche se fortemente probabile, non è però detto che il codice fiscale sia effettivamente errato.

David

La risposta è stata utile?

0 commenti Nessun commento

3 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2014-04-03T15:34:45+00:00

    Parto dall'inizio  per costruirti una demo rapidamente.

    Nuovo file di Access

    Nuova Tabella di nome "Tabe" con i campi :

    • TabId --- Contatore -- Key
    • CFis ---- Testo
    • Note ---- Testo

    ci metti dentro dei codici fiscali corretti e non

    crei un Nuovo Modulo e incolli dentro questo codice

    proposto da Cinzia ( e che trascrivo per chiarezza )

    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"

        Resto(3) = "C"

        Resto(4) = "D"

        Resto(5) = "E"

        Resto(6) = "F"

        Resto(7) = "G"

        Resto(8) = "H"

        Resto(9) = "I"

        Resto(10) = "J"

        Resto(11) = "K"

        Resto(12) = "L"

        Resto(13) = "M"

        Resto(14) = "N"

        Resto(15) = "O"

        Resto(16) = "P"

        Resto(17) = "Q"

        Resto(18) = "R"

        Resto(19) = "S"

        Resto(20) = "T"

        Resto(21) = "U"

        Resto(22) = "V"

        Resto(23) = "W"

        Resto(24) = "X"

        Resto(25) = "Y"

        Resto(26) = "Z"

        For i = 2 To 14 Step 2

            Select Case Mid$(CFis, i, 1)

                Case "0": p = 0

                Case "1": p = 1

                Case "2": p = 2

                Case "3": p = 3

                Case "4": p = 4

                Case "5": p = 5

                Case "6": p = 6

                Case "7": p = 7

                Case "8": p = 8

                Case "9": p = 9

                Case "A": p = 0

                Case "B": p = 1

                Case "C": p = 2

                Case "D": p = 3

                Case "E": p = 4

                Case "F": p = 5

                Case "G": p = 6

                Case "H": p = 7

                Case "I": p = 8

                Case "J": p = 9

                Case "K": p = 10

                Case "L": p = 11

                Case "M": p = 12

                Case "N": p = 13

                Case "O": p = 14

                Case "P": p = 15

                Case "Q": p = 16

                Case "R": p = 17

                Case "S": p = 18

                Case "T": p = 19

                Case "U": p = 20

                Case "V": p = 21

                Case "W": p = 22

                Case "X": p = 23

                Case "Y": p = 24

                Case "Z": p = 25

            End Select

            SumPari = SumPari + p

        Next i

        For i = 1 To 15 Step 2

            Select Case Mid$(CFis, i, 1)

                Case "0": d = 1

                Case "1": d = 0

                Case "2": d = 5

                Case "3": d = 7

                Case "4": d = 9

                Case "5": d = 13

                Case "6": d = 15

                Case "7": d = 17

                Case "8": d = 19

                Case "9": d = 21

                Case "A": d = 1

                Case "B": d = 0

                Case "C": d = 5

                Case "D": d = 7

                Case "E": d = 9

                Case "F": d = 13

                Case "G": d = 15

                Case "H": d = 17

                Case "I": d = 19

                Case "J": d = 21

                Case "K": d = 2

                Case "L": d = 4

                Case "M": d = 18

                Case "N": d = 20

                Case "O": d = 11

                Case "P": d = 3

                Case "Q": d = 6

                Case "R": d = 8

                Case "S": d = 12

                Case "T": d = 14

                Case "U": d = 16

                Case "V": d = 10

                Case "W": d = 22

                Case "X": d = 25

                Case "Y": d = 24

                Case "Z": d = 23

            End Select

            SumDisp = SumDisp + d

        Next i

        SumTot = SumPari + SumDisp

        Check = Resto((SumTot Mod 26) + 1)

        If Check = UCase$(Right(CFis, 1)) Then

           CheckCodFiscale = True

        Else

           CheckCodFiscale = False

        End If

    End Function

    Crei una Nuova query con questo testo:    

    SELECT

    Tabe.CFis,

    CheckCodFiscale(Tabe!CFis) AS Valido

    FROM

    Tabe

    ;   

    Hai anche la possibilita di evitare la query

    Cei una Nuova maschera associata a "Tabe"

    ci metti dentro i controlli/campi della tabella

    ci aggiungi un controllo con questa formula    

    =CheckCodFiscale([CFis])

    PS:  Non sottovalutare quanto dice David sui codici fiscali Duplicati,

    leggiti questo  

    http://it.wikipedia.org/wiki/Omocodia

    .

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2014-04-03T11:38:40+00:00

    salve,

    ma praticamente dove associo il codice?

    creo una casella di controllo e inserirla dove

    oppure

    in routine evento del campo CF (esempio dopo aggiornamento)

    Dove/come??

    Please help

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2012-02-09T13:21:37+00:00

    Grazie  a Cinzia e David

    La risposta è stata utile?

    0 commenti Nessun commento