Home/
 www.icosaedro.it 

 Controllo del codice fiscale e della partita IVA

Ultimo aggiornamento: 2020-01-23

Le funzioni per controllare l'inserimento del codice fiscale e della partita IVA scritte in Bash, C, Delphi, Go, Java, JavaScript, M2, Perl, PHP, Python, Xojo (già REALbasic), Ruby, Smalltalk, Swift e Visual Basic.

Indice

Storico degli aggiornamenti

Questo elenco include le nuove implementazioni degli algoritmi in altri linguaggi e le eventuali correzioni alle implementazioni esistenti.

2020-01-23 Introdotta la nozione di CF provvisorio. Aggiunto riferimento al DM 23 dicembre 1976. Espongo l'algoritmo di verifica Partita IVA leggermente semplificato. Nuove implementazioni in PHP e JS allegate al progetto PHPLint.
2018-06-03 Corretto errore validazione CF e PIVA implementazione PHP (aggiunto modificatore "D" alla espressione regolare in modo che "$" corrisponda alla fine della stringa e non alla fine di una riga).
2018-01-12 Realizzate le funzioni di controllo anche in Lua (contributo di Marco Banfi).
2017-09-28 Realizzate le funzioni di controllo anche in Ruby (contributo di Filippo Zanella).
2017-05-03 Realizzate le funzioni di controllo anche in Go (contributo di Marco Banfi).
2016-12-05 Corretto grave bug introdotto nei sorgenti Javascript e Delphi perché contenevano caratteri non ASCII. I sorgenti si sono corrotti lo scorso luglio nel passaggio al nuovo server quando il programma di trasferimento file ha deciso di convertirli subdolamente in ISO-8859-1 dall'originale UTF-8. Grazie a Marco Banfi per la segnalazione. Con l'occasione ho anche rinnovato il codice delle routines Javascript per renderlo più elegante.
2016-08-21 Realizzate le funzioni di controllo anche in Python (contributo di Gabriele Muciaccia).
2016-03-21 Realizzate le funzioni di controllo anche in Swift (contributo di Rino Setola).
2012-05-12 Aggiornate routine PHP in modo da usare preg_match() al posto della funzione ereg() ormai obsoleta (suggerimento di Niki Romagnoli).
2009-10-15 Corretta funzione P.IVA in REALbasic (Vincenzo).
2009-09-04 Realizzate le funzioni di controllo anche in Smalltalk (contributo di Laura Frigerio).
2007-03-27 Rimosso suggerimento per il controllo del CF usando una espressione regolare.
2004-02-16 Suggerimento per il controllo del CF usando una espressione regolare (contributo di Alan Lenni).
2003-09-13 Realizzate le funzioni di controllo anche in REALbasic (contributo di Giovanni Gualeni).
2003-06-30 Realizzate le funzioni di controllo anche in Delphi (contributo di Luca Leoncavallo).
2003-05-29 Realizzate le funzioni di controllo anche in Visual Basic (contributo di Carlo Marchesini).
2002-07-27 Descrizione degli algoritmi usati.
2002-04-06 Realizzate le funzioni di controllo anche in Java.
2002-04-06 Realizzate le funzioni di controllo anche in C e Perl.
2001-10-25 Realizzate le funzioni di controllo anche in JavaScript, con la possibilità di provarle on-line in questa stessa pagina.
2001-09-23 Corretta implementazione in bash del controllo codice fiscale.

Cosa sono il Codice Fiscale e la Partita IVA

Il Codice Fiscale e La Partita IVA vengono attribuiti dall'Agenzia delle Entrate che è la sola a poter garantire l'univocità e la corrispondenza tra questi codici e i soggetti identificati. Questi codici sono stati introdotti con il decreto ministeriale del 23 dicembre 1976 e pubblicato su Gazzetta Ufficiale n. 345 del 29-12-1976 - Supplemento Ordinario (testo disponibile in http://www.comune.jesi.an.it/MV/leggi/dm23-12-76.htm).

Il Codice Fiscale (in breve CF) individua univocamente una persona fisica rispetto ai servizi fiscali e sanitari dello Stato italiano, e può essere definitivo o provvisorio. Il Codice Fiscale definitivo è costituito da 16 caratteri alfanumerici; l'ultimo carattere, sempre alfabetico, è un codice di controllo calcolato sulla base dei precedenti caratteri allo scopo di prevenire banali errori di battitura. Il Codice Fiscale provvisorio è costituito da 11 cifre; l'ultima cifra è un codice di controllo calcolato sulla base delle cifre precedenti allo scopo di prevenire banali errori di battitura.

La Partita IVA individua univocamente i soggetti diversi da una persona fisica, cioè le ditte, sia individuali che società. E' costituita da 11 cifre; l'ultima cifra è un codice di controllo calcolato sulla base delle cifre precedenti allo scopo di prevenire banali errori di battitura.

Notare che l'algoritmo di calcolo e verifica del codice di controllo per la Partita IVA e per il CF provvisorio sono uguali.

Come verificare Codice Fiscale e Partita IVA

Lo scopo di queste routines è quello di prevenire i più comuni errori di battitura, per esempio omettendo qualche carattere oppure confondendo gli zeri con la lettera "O", oppure gli uni con le elle minuscole. A tale scopo verificheremo la lunghezza, i caratteri ammissibili e verificheremo anche il codice di controllo.

Queste routines sono utili per validare il data entry nei programmi e nei form del WEB. Sono realizzate in vari linguaggi per il controllo lato server nelle applicazioni WEB e nei programmi stand-alone, e in JavaScript per il controllo lato client nelle applicazioni WEB. Un ringraziamento particolare va a tutti coloro che hanno contribuito con le implementazioni in vari linguaggi.

Queste implementazioni fanno uso delle convenzioni seguenti:

Spesso funzioni di utilità del tipo qui presentate si usano per convalidare l'input dell'utente su di un form HTML: i vari campi di input devono essere controllati uno ad uno, e gli eventuali errori devono essere individuati e segnalati all'utente. E' cosa sana e giusta verificare tutti i campi di input e, se ci sono errori, segnalarli all'utente in una soluzione unica. Un modo semplice per realizzare la cosa è quello di inizializzare una variabile $err alla stringa vuota, e in essa accumulare i messaggi diagnostici man mano che vengono rilevati errori. Al termine dei controlli, se questa variabile è ancora una stringa vuota, allora non ci sono errori nei dati inseriti dall'utente; altrimenti, la variabile stessa contiene l'elenco completo sui problemi trovati.
Esempio in PHP:

    # in $err accumulo tutti i messaggi diagnostici:
    $err = "";

    # controllo i vari campi della maschera di input, accumulando in
    # $err i vari messaggi diagnostici, in modo da proporli in seguito
    # tutti insieme:
    # ...

    # controllo del CF:
    if( strlen($cf) == 0 ){
        $err = $err . "<li>Hai omesso il codice fiscale.\n";
    } else {
        $err = $err . ControllaCF($cf);
    }

    if( strlen($err) > 0 ){
        echo("<html><body><h1>ERRORE</h1><ul>$err</ul></body></html>");
        exit(0);
    }

Controlla CF e PI in questa stessa pagina

Il controllo dei dati immessi deve sempre essere eseguito lato server. Tuttavia, per velocizzare l'interazione, è utile eseguire un controllo preventivo anche lato client usando JavaScript. Ecco ad esempio un piccolo strumento di verifica on-line così realizzato: inserire un CF o una P.IVA, e il sorgente JavaScript incorporato in questa pagina mostrerà l'esito del controllo:


Codice Fiscale o Partita IVA:

Naturalmente è necessario avere abilitato l'interprete JavaScript nel proprio browser, come di norma è per default. Si può guardare al sorgente di questa pagina per vedere un esempio di impiego di questa soluzione.

Potete fare liberamente le vostre prove: i dati immessi vengono elaborati localmente al vostro computer, e quindi non attraversano la rete nè vengono memorizzati altrove se non nella pagina del vostro browser.


ATTENZIONE!

Se il carattere di controllo risulta "valido" questo NON ASSICURA che il codice fiscale o la partita IVA inserita esistano realmente. Ad esempio la partita IVA 00000000000 costituita da 11 cifre zero risulta "valida" nel senso che l'ultimo carattere è proprio il carattere di controllo corretto per i precedenti 10.


Miti, superstizioni e falsità

Ci sono molte credenze sbagliate intorno alla verifica del CF e della P.IVA. Esaminiamo le più comuni.

1. La credenza più comune è che il CF si possa costruire una volta noto il nome della persona, il suo sesso e la data e il luogo di nascita. Addirittura ci sono siti WEB e programmi che "costruiscono" il CF a partire dai dati anagrafici. Sebbene questi programmi diano spesso la risposta giusta, in generale il valore fornito non è affidabile né potrebbe esserlo, perché solo il Ministero delle Entrate può attribuire questi codici e risolvere le omocodie. Inoltre il codice dell'agenzia dipende dalla situazione al momento della nascita del soggetto, cosa che può cambiare nel tempo; pertanto non è generalmente sufficiente disporre dell'elenco delle agenzie delle finanze corrente, ma occorre uno storico. Anche la provincia e il comune di nascita possono avere delle vicende complicate.

2. Alcuni ritengono che, sebbene gli algoritmi che ricostruiscono il CF non possano essere affidabili, la percentuale di errori commessi sia comunque trascurabile, e quindi valga la pena aggiungere comunque anche questo controllo. Questo controllo ulteriore sarebbe utile soprattutto nei siti WEB, in modo da filtrare via le persone che tentano di registrarsi o di fare acquisti fornendo dati fasulli. E' un errore, perché chi vuole fornire dati fasulli ha l'accortezza di fornire dati verosimili e che non destino sospetti, e quindi inventerà l'identità fittizia di un Mario Rossi qualsiasi e fornirà un CF apparentemente corretto superando ogni validazione. Invece alcune persone del tutto oneste si vedranno rifiutare l'acquisto o la registrazione perché il loro CF risulta non valido secondo questi algoritmi. E' il problema che mi hanno sottoposto alcune persone che, per effetto delle omocodie, hanno delle cifre al posto delle lettere. Ho suggerito a queste persone di segnalare il problema ai gestori del sito e poi cambiare sito WEB. Applicare questi algoritmi di costruzione del CF non scoraggia le persone malevoli mentre crea problemi alle persone in buona fede.

3. Alcuni osservano che i primi 6 caratteri del CF sono sempre lettere, cui seguono 2 cifre, poi una lettera, ecc. e pertanto sottopongono il CF a un controllo ulteriore mediante una espressione regolare. E' un errore che ho fatto anche io. Sempre a causa del problema delle omocodie, al posto delle lettere possono apparire delle cifre. Applicare una regex in questo caso significa ricadere nel problema del punto precedente, cioè penalizzare le persone in buona fede senza impensierire minimamente l'improbabile Mario Rossi nato l'1/1/1900 codice fiscale tarocco MRORSS00A00A000U.

4. Alcuni propongono di sottoporre il CF e la P.IVA ad ulteriori controlli di verosimiglianza euristici. Per esempio la P.IVA 00000000000 sembra evidentemente falsa, come anche 44444444440, oppure 12345678903 e molti altri valori "sospetti". Altro errore. Nulla garantisce che qualche persona fisica o giuridica non possegga uno di tali codici ridondanti. Il signor Mario Rossi col CF tarocco, oppure la ditta fantasma Truffe & Bidoni s.r.l. forniranno sempre un codice verosimile per non destare sospetti, mentre soggetti del tutto in buona fede ma sfortunatamente dotati di un codice particolarmente "regolare" verranno rifiutati dal programma.

Morale: non aggiungere controlli euristici arbitrari perché:

Bisogna infine ricordare che ad alcune persone può essere attribuito un CF provvisorio a 11 cifre che va validato come una Partita IVA. Sebbene questi CF provvisori siano, appunto, provvisori e abbiano validità di alcuni mesi, devono essere validati a parte e accettati.

Licenza

I programmi qui pubblicati sono assolutamente gratuiti (free) e di pubblico dominio per qualsiasi uso; anche i sorgenti sono utilizzabili liberamente e sono di pubblico dominio. Non è necessario citare l'autore o la fonte, sebbene sarebbe deontologicamente corretto farlo. Citare la fonte sarebbe anche utile per facilitare la ricerca di eventuali aggiornamenti e correzioni, che verrebbero pubblicati in questa pagina e citati nello storico che appare all'inizio.

Sebbene io e gli altri autori delle routine abbiamo posto la massima cura nel realizzare questi programmi e nel verificare la loro validità, tuttavia non ci assumiamo nessuna responsabilità nel caso venissero riscontrati malfunzionamenti o altri difetti. Sarò grato a chiunque voglia segnalarmi eventuali problemi riscontrati.

Implementazioni in vari linguaggi

Linguaggio Algoritmo
Codice Fiscale Partita IVA
Bash
C
Delphi (1) (1)
Go (7) (7)
Java
JavaScript
Lua (7) (7)
M2
Perl
PHP
Python (6) (6)
Ruby (8) (8)
Smalltalk (3) (3)
Swift (5) (5)
Visual Basic (4) (4)
Xojo (già REALbasic) (2) (2)
1. Contributo di Luca Leoncavallo <lleoncavalloeconb.com>.
2. Contributo di Giovanni Gualeni <ggualenilibero.it>.
3. Contributo di Laura Frigerio <laura.frigeriolifeware.ch>.
4. Contributo di Carlo Marchesini <archmarchesini-it.com>.
5. Contributo di Rino Setola <rinosetolagmail.com>.
6. Contributo di Gabriele Muciaccia <gabrielemuciacciaonenetbeyond.org>.
7. Contributo di Marco Banfi <mbanfigmail.com>.
8. Contributo di Filippo Zanella <filipposellfapp.com>.

Come contribuire

Hai realizzato le routine del controllo CF e PIVA nel linguaggio X e vorresti vederle pubblicate qui? Ecco come fare:

Algoritmi

Ecco la spiegazione degli algoritmi che si usano per la verifica del Codice Fiscale e della Partita IVA.

Codice Fiscale definitivo. E' composto da 16 caratteri alfanumerici. L'ultimo carattere è il codice di controllo che vogliamo verificare:

1. si pone s=0
2. si considerano i caratteri di posto dispari dal primo al
   quindicesimo e si convertono in numeri secondo questa tabella:

    0 -> 1
    1 -> 0
    2 -> 5
    3 -> 7
    4 -> 9
    5 -> 13
    6 -> 15
    7 -> 17
    8 -> 19
    9 -> 21
    A -> 1
    B -> 0
    C -> 5
    D -> 7
    E -> 9
    F -> 13
    G -> 15
    H -> 17
    I -> 19
    J -> 21
    K -> 2
    L -> 4
    M -> 18
    N -> 20
    O -> 11
    P -> 3
    Q -> 6
    R -> 8
    S -> 12
    T -> 14
    U -> 16
    V -> 10
    W -> 22
    X -> 25
    Y -> 24
    Z -> 23

I numeri corrispondenti a ciascun carattere vanno sommati ad s.

3. si considerano i caratteri di posto pari dal secondo al
   quattordicesimo e si convertono in numeri secondo questa
   tabella:

    0 -> 0
    1 -> 1
    2 -> 2
    ...
    9 -> 9
    A -> 0
    B -> 1
    C -> 2
    ...
    Z -> 25

Notare che alle cifre corrisponde il valore stesso, mentre alle lettere
A-Z corrispondono i numeri 0-25.
I numeri corrispondenti a ciascun carattere vanno sommati ad s.

4. si calcola il resto della divisione di s per 26:
   r=s%26 cioe' r=s-26*int(s/26); risulta un numero tra 0 e 25;
5. si converte r in una lettera associando a 0 la A, a 1 la B, ...,
   a 25 la Z
6. la lettera ottenuta al punto 5 deve corrispondere all'ultimo
   carattere del codice fiscale (che e' sempre una lettera).
Esempio: ABCDEF12B23P432P
1. s=0
2. s=1+5+9+0+0+7+9+5
3. s=s+1+3+5+2+2+15+3=67
4. r=67%26=15
5. al 15 corrisponde la lettera "P"
6. OK.

Codice Fiscale provvisorio e Partita IVA. E' composta da 11 cifre. L'ultima cifra è il codice di controllo che vogliamo verificare:

1. si pone s=0
2. sommare ad s le cifre di posto dispari (dalla prima alla nona)
3. per ogni cifra di posto pari (dalla seconda alla decima),
   moltiplicare la cifra per due e, se risulta piu' di 9,
   sottrarre 9; quindi aggiungere il risultato a s;

   ATTENZIONE!   L'operazione "se risulta piu' di 9, sottrarre 9"
   ===========   e' molto simile ma non equivalente al resto modulo 9.
                 Infatti se la cifra e' 9 allora 2*9=18 per cui si deve
                 sottrarre 9 ottenendo ancora 9; invece (2*9)%9=0 che
                 e' sbagliato.

4. si calcola il resto della divisione di s per 10:
   r=s%10 cioe' r=s-10*int(s/10); risulta un numero tra 0 e 9;
5. se r=0 si pone c=0, altrimenti si pone c=10-r
6. l'ultima cifra del codice deve valere c.
Esempio: 12345678903
1. s=0
2. s=1+3+5+7+9=25
3. s=s+4+8+3+7+0=47
4. r=7
5. c=3
6. OK.

L'algoritmo spiegato sopra è adatto sia per calcolare che per verificare il codice di controllo. Tuttavia, se lo scopo è la mera verifica, è possibile semplificare un pochino le cose applicando il seguente algoritmo, dove la somma è estesa a tutte le cifre e il risultato finale deve essere un moltiplo di 10:

1. si pone s=0
2. sommare ad s le cifre di posto dispari (dalla prima alla undicesima)
3. per ogni cifra di posto pari (dalla seconda alla decima),
   moltiplicare la cifra per due e, se risulta piu' di 9,
   sottrarre 9; quindi aggiungere il risultato a s;

   ATTENZIONE!   L'operazione "se risulta piu' di 9, sottrarre 9"
   ===========   e' molto simile ma non equivalente al resto modulo 9.
                 Infatti se la cifra e' 9 allora 2*9=18 per cui si deve
                 sottrarre 9 ottenendo ancora 9; invece (2*9)%9=0 che
                 e' sbagliato.

4. si calcola il resto della divisione di s per 10:
   r=s%10 cioe' r=s-10*int(s/10); risulta un numero tra 0 e 9;
5. se r=0 il codice di controllo è valido.
Esempio: 12345678903
1. s=0
2. s=1+3+5+7+9+3=28
3. s=s+4+8+3+7+0=50
4. r=0
5. OK.

Riferimenti

Argomenti correlati


Umberto Salsi
Commenti
Contatto
Mappa
Home/
An abstract of the latest comments from the visitors of this page follows. Please, use the Comments link above to read all the messages or to add your contribute.

2023-10-27 by Riccardo La Monica
Controllo dei Codici Fiscali Italiani tramite una funzione VBA
Ho migliorato il codice implementando anche tutte le eccezioni e creando una funzione, scritta in VBA, compatibile con tutte le applicazioni Office. Function VerificaCodFis(sCF As Control) As Boolean Dim oRE As Object Dim sPatt As String Dim j As Integer Dim i As Byte Dim nHash As Integer Dim vRet As Variant Dim aOddTable As Variant Dim aEvenTable As Variant Dim aCarryTable As Variant Dim aTempTab As Variant Dim aTemp As Variant 'tabella dei caratteri dispari aOddTable = Array(Array("0", 1), Array("1", 0), Array("2", 5), Array("3", 7), _ Array("4", 9), Array("5", 13), Array("6", 15), Array("7", 17), _ Array("8", 19), Array("9", 21), Array("A", 1), Array("B", 0), _ Array("C", 5), Array("D", 7), Array("E", 9), Array("F", 13), _ Array("G", 15), Array("H", 17), Array("I", 19), Array("J", 21), _ Array("K", 2), Array("L", 4), Array("M", 18), Array("N", 20), _ Array("O", 11), Array("P", 3), Array("Q", 6), Array("R", 8), _ Array("S", 12), Array("T", 14), Array("U", 16), Array("V", 10), _ Array[...][more...]

2019-06-13 by Federico
Errore nel validatore?
Salve, mi sono accorto di un problema al validatore CF. Prendiamo un codice fiscale valido, ad esempio BLIPTR93M04A674C. Ora sostituisco 0->O e C->Q e diventa: BLIPTR93MO4A674Q. Per il validatore sono validi entrambi, in realtà il secondo non può esistere perchè in caso vi fosse omocodia le lettere che sostituiscono i numeri partono dal primo numero a destra. Purtroppo capita di frequente che un utente immetta la lettera O invece che lo zero.[more...]

2014-04-03 by Guest
Questa pagina è preziosa
Dovrebbe essere messa su wikipedia con tanto di cappello a te che l'hai fatta. Grazie :)[more...]

2012-05-15 by Guest
Web Service Partite IVA Comunitarie
Per le Partita IVA esiste un Web Service della CE da poter utilizzare nella proprie applicazioni. I dettagli sul mio Blog http://musarra.wordpress.com/2012/05/13/web-service-partite-iva-comunitarie/ e http://musarra.wordpress.com/2010/02/11/consumiamo-i-servizi-dellagenzia-delle-entrate-partite-iva-comunitarie/ Bye, Antonio M.[more...]

2012-01-13 by lbit
test più approfonditi (in javascript)
Mi sono imbattuto anch'io nel problema di verificare i CF e ho trovato molto utili le info in questa pagina. Ho un paio di osservazioni sui "miti": - mito 2: i casi di omocodia vengono risolti sostituendo lettere al posto delle cifre (e non "cifre al posto delle lettere"); dato che ci sono 7 cifre nel CF che posono venire sostituite con lettere, questo significa che ci sono 128 (2^7) possibili codici fiscali per ogni input (nome,cognome,sesso,data di nascita,comune). Quindi è vero che partendo dai dati anagrafici non è possibile calcolare il CF con certezza (non sappiamo quale tra quei 128 gli è stato assegnato), però se in un modulo chiediamo di inserire anche il codice fiscale, possiamo sicuramente stabilire con certezza se il CF inserito corrisponde ai dati inseriti o meno, basta assicurarsi che sia uno dei 128 validi per quei dati, senza nessun rischio di errore neanche in caso di omocodie. Basta verificare prima il carattere di controllo, poi riportare i caratteri corrispondenti a[...][more...]

2011-01-21 by Guest
python codice fiscale
gia che ci sono vi do pure quello del cf: _cf_odd = [ 1, 0, 5, 7, 9, 13, 15, 17, 19, 21, # 0 - 9 0, 0, 0, 0, 0, 0, 0, # :;<=>?@ 1, 0, 5, 7, 9, 13, 15, 17, 19, 21, # A-Z 2, 4, 18, 20, 11, 3, 6, 8, 12, 14, 16, 10, 22, 25, 24, 23 ] _cf_even = range(10) + [ 0, 0, 0, 0, 0, 0, 0 ] + range(26) def cf(value): ctrlchar = ord(value[15].upper()) - 65 value = map(lambda x: ord(x.upper()) - 48, value) checksum = sum(map(lambda x: _cf_even[value[x]], xrange(1, 14, 2))) checksum += sum(map(lambda x: _cf_odd[value[x]], xrange(0, 15, 2))) checksum %= 26 return checksum == ctrlchar ciao sherpya[more...]

2011-01-21 by Guest
python
def piva(value): if (len(value) != 11) or not value.isdigit(): return False value = map(int, value) checksum = sum(map(lambda x: value[x], xrange(0, 10, 2))) checksum += sum(map(lambda x: (2 * value[x]) % 9, xrange(1, 10, 2))) checksum = 10 - (checksum % 10) return value[10] == checksum saluti sherpya[more...]

2010-07-08 by Guest
correttezza del CF
Io credo che sia comunque importante fornire uno strumento di controllo della correttezza del CF a patto però che in caso di non superamento di esso si limiti ad un avvertimento. Mostro un ipotetico scenario: una persona che si chiama CARLO ALBERTO ROSSI (nome inventato)per associarsi ad un centro XXX deve compilare i dati per la privacy: siccome questa persona viene regolarmente chiamata CARLO, nel campo nome scrive solamente CARLO. Siccome la società XXX che tiene il registro dei soci a fini fiscali ha la necessità che ad ogni CF corrispondano esattamente i dati di quella stessa persona, è chiaro che il CF immesso dal nostro nuovo socio pur essendo corretto, non corrisponderebbe ai dati anagrafici di esso. Uno strumento di controllo in questo caso rivelerebbe l'errore. Spero di essermi spiegato decentemente. Un saluto a tutti [more...]

2010-02-26 by Guest
Il controllo di P.IVA e la Repubblica di San Marino
Volevo ricordare a quanti hanno letto questo interessantissimo articolo (per cui ringrazio l'autore) che l'algoritmo per il controllo della Partiva Iva ha ovviamente senso solo per Partita IVA italiana. Recentemente mi sono imbattuto in una partiva iva della Repubblica di San Marino che ha il formato SM12345 (ovvero SM+5 numeri!) di cui ignoro la validazione. Restano quindi sempre valide le raccomandazioni dell'autore: il controllo non blocca i maleintenzionati, ma solo eventuali errori di digitazione. Questi algoritimi possono essere utili come "Avvisi" all'utente, ma comunque che non siano bloccanti... Saluti.[more...]

2009-08-03 by Guest
codice fiscale - ulteriore restrizione nel check
l' algoritmo proposto dorebbe validare anche questo codice fiscale errato: TLSHLH77RO8Z249T dove al posta di zero otto e' scritto lettera O otto. Dal sito dell' agenzia delle entrare a http://www.agenziaentrate.it/ilwwcm/connect/Nsi/Documentazione/Guide+Fiscali/Annuario+2008+guida/4_Codice_fscale_e_tessera_sanitaria.html dove parla di omocodia si legge: La distinzione avviene effettuando, nell'ambito dei sette caratteri numerici, sistematiche sostituzioni di una o più cifre, a partire da quella più a destra, con corrispondenti caratteri alfabetici Questo porta che è possibile effettuare una ulteriore restrizione sulla validità del codice; e possibile prendere solo le posizioni numeriche ed effettuare un test in modo che se venga trovata una lettera tutto cio che segue deve essere una lettera. Allego piccolo esempio in perl: -----BEGIN----- return ERR_VALIDCHAR if $cf !~/^[A-Z]{6}([A-Z0-9]{2})[A-Z]([A-Z0-9]{2})[A-Z]([A-Z0-9]{3})[A-Z0-9]$/; my $num=$1.$2.$3; #costruisce una stringa forma[...][more...]

2009-04-14 by Umberto Salsi
Re: miglioramento alla funzione
Anonymous wrote: [...] Secondo il mio modo di pensare, i casi sono due: o l'operatore ha introdotto un dato corretto oppure è sbagliato. Se il dato è corretto, allora il programma deve accettarlo senza ulteriori modifiche o artefatti. Se invece il dato è sbagliato, allora il programma deve rifiutarlo con motivazione, e quindi deve riproporre all'operatore il dato sbagliato esattamente così come lo aveva introdotto. In deroga a questi principi, posso ammettere che vengano eliminati gli spazi initili, e posso ammettere che si cambino le lettere minuscole in maiuscole o viceversa per uniformità di archiviazione delle informazioni. Ora, il preg_replace() che appare nel tuo codice, invece, elimina tutti i caratteri che non sono alfanumerici, cioè cerca di adattare un input magari completamente errato (spesso la gente introduce i dati nelle caselle sbagliate dei form) per renderlo giusto. Questo secondo me non è corretto farlo perché frustrante per l'operatore (l'operatore pretende che il pr[...][more...]

2009-03-23 by Guest
miglioramento alla funzione
Dato che spessissimo gli utenti inseriscono il CF esattamente come compare (cioè con gli spazi) basta inserire una piccola modifica per migliorare l'efficacia della funzione php. nella funzione che ho implementato ho inserito l'errore in un parametro secondario mentre la funziona ritorna il CF "normalizzato" (tutto maiuscolo e senza caratteri spuri) Da function ControllaCF($cf) { if( $cf == '' ) return ''; if( strlen($cf) != 16 ) ... è diventata function ControllaCF($cf, &$errore) { if( $cf == '' ) return ''; $cf = preg_replace("/[^0-9a-z]+/i", "", $cf); $cf = strtoupper($cf); if( strlen($cf) != 16 ) ... con i messaggi di errore inseriti in $errore mentre la funzione ritorna $cf Il codice chiamante diventa quindi unset($errore); $cf = ControllaCF($cf, $errore); if(!$cf or $errore) { ... controllo condizione di errore ... } ... Hope this helps Chris[more...]

2008-01-29 by Umberto Salsi
Re: Algoritmo di Generazione Codice Fiscale
Anonymous wrote: [...] L'unico posto dove si parla di 14-esimo carattere è al punto 3 dell'algoritmo del CF, cioè dove di devono considerare i caratteri di posto pari. Il 15-esimo ha posto dispari e quindi lì non c'entra proprio. Per cui non capisco l'obiezione. [more...]

2008-01-29 by Guest
Algoritmo di Generazione Codice Fiscale
Salve nella descrizione dell'algoritmo si parla di arrivare al 14 carattere. In realtà il check viene eseguito fino al 15° carattere. [more...]