Il codice fiscale in Italia è un codice alfanumerico a lunghezza fissa di 16 caratteri, ispirato dall’uso biblioteconomico, che serve a identificare in modo univoco ai fini fiscali e amministrativi i cittadini, le associazioni non riconosciute, i contribuenti e gli stranieri nati e domiciliati nel territorio italiano.
http://it.wikipedia.org/wiki/Codice_fiscale
Nota: questo post è in Italiano, visto che il codice fiscale… è italiano!
Generazione codice fiscale
Questo un esempio di codice fiscale di Rossi Mario, a caso: RSSMRA84R28F205D
COGNOME
Vengono prese le consonanti del cognome (o dei cognomi, se ve ne è più di uno) nel loro ordine (primo cognome, di seguito il secondo e così via). Se le consonanti sono insufficienti, si prelevano anche le vocali, sempre nel loro ordine e, comunque, le vocali vengono riportate dopo le consonanti. Nel caso in cui un cognome abbia meno di tre lettere, la parte di codice viene completata aggiungendo la lettera X (per esempio: Fo → FOX). Per le donne, viene preso in considerazione il solo cognome da nubile.
NOME
Vengono prese le consonanti del nome (o dei nomi, se ve ne è più di uno) nel loro ordine (primo nome, di seguito il secondo e così via) in questo modo: se il nome contiene quattro o più consonanti, si scelgono la prima, la terza e la quarta, altrimenti le prime tre in ordine. Se il nome non ha consonanti a sufficienza, si prendono anche le vocali; in ogni caso le vocali vengono riportate dopo le consonanti. Nel caso in cui il nome abbia meno di tre lettere la parte di codice viene completata aggiungendo la lettera X.
ANNO NASCITA
si prendono le ultime due cifre dell’anno di nascita
MESE NASCITA
a ogni mese dell’anno viene associata una lettera in base a questa tabella:
|
GIORNO NASCITA (e SESSO)
si prendono le due cifre del giorno di nascita (se è compreso tra 1 e 9 si pone uno zero come prima cifra); per i soggetti di sesso femminile, a tale cifra va sommato il numero 40. In questo modo il campo contiene la doppia informazione giorno di nascita e sesso
COMUNE NASCITA
Per identificare il comune di nascita si utilizza il codice detto Belfiore, composto da una lettera e tre cifre numeriche (es: E815). Per i nati al di fuori del territorio italiano, sia cittadini stranieri che cittadini italiani nati all’estero, si considera lo stato estero di nascita; in tal caso la sigla inizia con la lettera Z, seguita dal numero identificativo dello stato.
CARATTERE DI CONTROLLO
A partire dai quindici caratteri alfanumerici ricavati in precedenza, si determina il carattere di controllo in base a un particolare algoritmo che opera in questo modo:
- si mettono da una parte i caratteri alfanumerici che si trovano in posizione dispari (il primo, il terzo eccetera) e da un’altra quelli che si trovano in posizione pari (il secondo, il quarto eccetera);
- fatto questo, i caratteri vengono convertiti in valori numerici secondo le seguenti tabelle:
CARATTERI ALFANUMERICI DISPARI | |||||||
Carattere | Valore | Carattere | Valore | Carattere | Valore | Carattere | Valore |
0 | 1 | 9 | 21 | I | 19 | R | 8 |
1 | 0 | A | 1 | J | 21 | S | 12 |
2 | 5 | B | 0 | K | 2 | T | 14 |
3 | 7 | C | 5 | L | 4 | U | 16 |
4 | 9 | D | 7 | M | 18 | V | 10 |
5 | 13 | E | 9 | N | 20 | W | 22 |
6 | 15 | F | 13 | O | 11 | X | 25 |
7 | 17 | G | 15 | P | 3 | Y | 24 |
8 | 19 | H | 17 | Q | 6 | Z | 23 |
CARATTERI ALFANUMERICI PARI | |||||||
Carattere | Valore | Carattere | Valore | Carattere | Valore | Carattere | Valore |
0 | 0 | 9 | 9 | I | 8 | R | 17 |
1 | 1 | A | 0 | J | 9 | S | 18 |
2 | 2 | B | 1 | K | 10 | T | 19 |
3 | 3 | C | 2 | L | 11 | U | 20 |
4 | 4 | D | 3 | M | 12 | V | 21 |
5 | 5 | E | 4 | N | 13 | W | 22 |
6 | 6 | F | 5 | O | 14 | X | 23 |
7 | 7 | G | 6 | P | 15 | Y | 24 |
8 | 8 | H | 7 | Q | 16 | Z | 25 |
- a questo punto, i valori che si ottengono dai caratteri alfanumerici pari e dispari vanno sommati tra di loro e il risultato va diviso per 26; il resto della divisione fornirà il codice identificativo, ottenuto dalla seguente tabella di conversione:
RESTO | |||||||
Resto | Lettera | Resto | Lettera | Resto | Lettera | Resto | Lettera |
0 | A | 7 | H | 14 | O | 21 | V |
1 | B | 8 | I | 15 | P | 22 | W |
2 | C | 9 | J | 16 | Q | 23 | X |
3 | D | 10 | K | 17 | R | 24 | Y |
4 | E | 11 | L | 18 | S | 25 | Z |
5 | F | 12 | M | 19 | T | ||
6 | G | 13 | N | 20 | U |
OMOCODIA
Due diverse persone potrebbero avere uguali tutte e sedici le lettere/cifre generate usando questo schema (omocodia). In questo caso, l’Agenzia delle entrate provvede a sostituire sistematicamente i soli caratteri numerici (a partire dal carattere numerico più a destra) con una lettera, secondo la seguente tabella di corrispondenza:
Cifra | Lettera | Cifra | Lettera | Cifra | Lettera |
0 | L | 4 | Q | 8 | U |
1 | M | 5 | R | 9 | V |
2 | N | 6 | S | ||
3 | P | 7 | T |
L’omocodia non può essere calcolata con un algoritmo, ma è gestita dall’Agenzia delle Entrate.
Libreria in objectivec
Non metto il sorgente, anche perché, a sviluppare l’algoritmo sopra citato, ci si mette 1 ora.
Come si usa?
Scarica lo zip da qui: APCodiceFiscale.zip
Il file deve contenere 3 file, tra cui:
- APCodiceFiscale.h – l’header
- codici.bundle – il bundle con i codici comune italiani e stati esteri
- libAPCodiceFiscale.a – la libreria statica
Bisogna importare nel progetto i file e instanziare la classe:
#import "APCodiceFiscale.h"
[...]
APCodiceFiscale *cod = [[APCodiceFiscale alloc] init];
e impostare i valori desiderati:
cod.Nome = @"mario";
cod.Cognome = @"rossi";
cod.BirthDay = @"28";
cod.BirthMonth = @"10";
cod.BirthYear = @"1984";
cod.Estero = APCodFiscStateItalia;
cod.Sesso = APCodFiscSessoMaschio;
cod.Comune = @"milano";
cf = [ cod calcola ];
NSLog(@"%@", cf);
Nel caso ci fosse bisogno di mostrare a video la lista dei comuni italiani e/o gli stati esteri, è possibile recuperare un NSDictionary dalle due proprietà readonlydell’header, fatto in chiave/valore e contenente le voci “COMUNE”:”CODICE”:
NSDictionary *ita = cod.CodiciItaliani;
NSDictionary *ext = cod.CodiciEsteri;
NSLog(@"%@", ita);
NSLog(@"%@", ext);
et voilà!
Questo il vostro output:
CodiceFiscale[2314:70b] ***** CODICE FISCALE: RSSMRA84R28F205D *****
CodiceFiscale[2314:70b] RSSMRA84R28F205D
L’omocodia, ovviamente non viene supportata, di conseguenza, in questi casi il codice generato potrebbe risultare sbagliato.
Se qualcosa non funziona, fatemelo notare.
enjoy.
Rif:
albertopasca.it
wikipedia.it