Newsgroup: it.comp.lang.delphi
Titolo: Codice fiscale ritorna i dati anagrafica

Dato un certo codice fiscale
esiste una funzione che mi
ritorni tutti i valori della mia anagrafica?
 
Ciao 
annagel

 ritorni tutti i valori della mia anagrafica?
Se per ritornare i valori della mia anagrafica intendi anche Nome e Cognome
della persona non credo
proprio che sia possibile.
Il codice fiscale contiene solo alcuni caratteri del nome e cognome (una
cosa tipo l'ebraico che si scrive
senza le vocali), perciň come si fa a risalire al nome e cognome corretti ?
Per lo stesso motivo sono andate perdute la pronuncia di alcune parole della
lingua ebraica antica.
Nessuno sa quali erano le vocali che venivano pronunciate all'epoca. Si dice
Gesů o Ioshua ? La
seconda sembra la piů probabile, ma nessuno lo puň dire con certezza.
Ciao.
Marco D.T.

 ritorni tutti i valori della mia anagrafica?
Da un codice fiscale, si può risalire solo al sesso, alla data di nascita
e a luogo di nascita.
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

Si, certo Andrea,
mi serve ricavare
sesso,  data di nascita
 luogo di nascita,
conosci dove posso reperire la funzione?
Grazie
Andrea Laforgia ha scritto:


Questo dovrebbe fare al caso tuo...
ciao
***************************************
Algoritmo di calcolo del Codice Fiscale
***************************************
  CCC NNN AA M GG L VVV K
  ||| ||| || | || | ||| |
  \|/ \|/ |/ | |/ \ \|/ |
   |   |  |  | |   \ |  |
   |   |  |  | |    \|  \- 1 lettera Calcolo algebrico dei 15
precedenti
   |   |  |  | |     \---- 4 Cifre ASSEGNATE al luogo di Nascita
   |   |  |  | \---------- 2 cifre del Giorno della Data di Nascita
   |   |  |  \------------ 1 lettera Mese della Data di Nascita
   |   |  \--------------- 2 ultime cifre dell'Anno della Data di
Nascita
   |   \------------------ 3 lettere del Nome (prevalentemente
consonanti)
   \---------------------- 3 lettere del Cognome (prevalentemente
consonanti)
                          ----
                           16
Il significato dettagliato delle singole componenti e' il seguente:
CCC NNN AA M GG L VVV K
^^^
Tre caratteri alfabetici maiuscoli della prima, seconda e terza
(1',2',3') consonante del Cognome.
Se le consonanti per il Cognome fossero meno di tre, aggiungere le
vocali nello stesso ordine in cui si presentano.
Se l'intero Cognome fosse piu' corto di tre caratteri, aggiungere una X
per ogni carattere mancante.
Per le donne coniugate considerare solo il Cognome da nubile.
Nei Cognomi composti da piu' parti, gli spazi intermedi non vanno
considerati
( es. De Rossi D'Aquino sara' DEROSSIDAQUINO ).
CCC NNN AA M GG L VVV K
    ^^^
Tre caratteri alfabetici maiuscoli della prima, terza e quarta
(1',3',4') consonante del Nome.
Se le consonanti per il Nome fossero solo tre, le si prendono
nell'ordine in cui si presentano.
Se le consonanti fossero meno di tre, aggiungere le vocali nello stesso
ordine in cui si presentano.
Se l'intero Nome fosse piu' corto di tre caratteri, aggiungere una X
per ogni carattere mancante.
Nei Nomi composti da piu' parti, gli spazi intermedi non vanno
considerati
( es. Antonia Maria Luisa sara' ANTONIAMARIALUISA )
CCC NNN AA M GG L VVV K
        ^^
Due caratteri numerici per l'anno di nascita, solo le unita' e le
decine (le ultime due cifre)
(es. 1968 diventa 68)
CCC NNN AA M GG L VVV K
           ^
Un carattere alfabetico indicante il Mese della Data di Nascita
Considerando questa tabella:
    A= Gennaio;   B= Febbraio; C= Marzo;    D= Aprile;
    E= Maggio;    H= Giugno;   L= Luglio;   M= Agosto;
    P= Settembre; R= Ottobre;  S= Novembre; T= Dicembre
CCC NNN AA M GG L VVV K
             ^^
Due caratteri numerici per il giorno di nascita. Per le donne, occore
sommare al giorno di nascita 40.
es. uomo nati il 7/8/1968 = 07
    donna nata il 7/8/1968 = 47
CCC NNN AA M GG L VVV K
                ^ ^^^
Quattro caratteri alfanumerici.
Codice del Comune di nascita rilevato dai volumi dei Codici dei comuni
di Italia e degli Stati esteri, redatti dalla Direzione generale del
Catasto.
Esistono database che contencono la relazione Comune <-> Codice
Catasto.
CCC NNN AA M GG L VVV K
                      ^
Un carattere alfabetico Carattere di controllo ottenuto convertemdo i
singoli caratteri in posizione pari secondo i valori della Tabella [A],
ed i caratteri in posizione dispari secondo i valori della Tabella [B].
Si sommano i valori ottenuti dalla conversione ed il totale lo si
divide per 26.
Il resto della divisione lo si converte secondo la Tabella [C].
Quando l'espressione alfanumerica relativa ai primi quindici caratteri
del codice risulta comune a due o piu' soggetti, si provvede a
differenziarla per ciascuno dei soggetti successivi al primo
codificato. A tal fine, si effettuano nell'ambito dei sette caratteri
numerici contenuti nel codice sistematiche sostituzioni di una o piu'
cifre a partire da quella di destra, con corrispondenti caratteri
alfabetici secondo la seguente tabella [D].
TABELLA [ A ] (caratteri in posizione pari)
 0=0  1=1  2=2  3=3  4=4  5=5  6=6  7=7  8=8  9=9
 A=0  B=1  C=2  D=3  E=4  F=5  G=6  H=7  I=8  J=9
 K=10 L=11 M=12 N=13 O=14 P=15 Q=16 R=17 S=18 T=19
 U=20 V=21 W=22 X=23 Y=24 Z=25
TABELLA [ B ] (caratteri in posizione dispari)
 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
TABELLA [ C ] (conversione del carattere di controllo)
 0=A  1=B  2=C  3=D  4=E  5=F  6=G  7=H  8=I  9=J
 10=K 11=L 12=M 13=N 14=O 15=P 16=Q 17=R 18=S 19=T
 20=U 21=V 22=W 23=X 24=Y 25=Z
TABELLA [ D ] (sostituzioni in caso di codice fiscale doppio)
 0=L  1=M  2=N  3=P  4=Q
 5=R  6=S  7=T  8=U  9=V

Ti ringrazio molto,
anche se , speravo di trovare il "piatto pronto" :
la funzione bella e scritta,
dirai: pretendi troppo!
.... bhe! almeno ci speravo....
ma grazie lo stesso ..... è già molto!
Ciao 
Anna

>a partire da quella di destra,
cioè di CCC NNN AA M GG L rst K
si parte da "t" ?


...altra cosa...
come faccio a sapere che per l'anno di nascita che non sia 2000 o 1900
?
cioè  ' 04' è 1904 o 2004 ?
da dove lo ricavo?

  luogo di nascita,
Il luogo di nascita ha un codice specifico (codice Belfiore), presente
nella lista dei comuni (facilmente reperibile su internet).  Per esempio,
Roma ha codice H501.
In rete trovi facilmente l'algoritmo di calcolo del codice fiscale e da lì
risali a tutto ciò che ti serve.


 ?
Non puoi.


 dirai: pretendi troppo!
Più che altro, richiedere la pappa pronta è proprio il modo preciso per
evitare che qualcuno ti aiuti ;-)
Comunque, la pappa pronta c'è e la trovi cercando.


Per chi volesse la pappa pronta...
Andrea , volevo dirti una cosa :
GRAZIE MILLE!
IL TUO ALGORITMO E' STATO INDISPENSABILE, ED ERA IMPECCABILE!
....
var   MesiARR: array [1..12] of char =
('A','B','C','D','E','H','L','M','P','R','S','T');
var   SostOmonimia: array [1..10] of char =
('L','M','N','P','Q','R','S','T','U','V');
implementation
// ritorna solo giorno, mese, anno (2 cifre),
CodiceBelfioreComune,sesso
function RisolviCodFisc(const CodiceFiscale :string ): TStringList;
var
  i : integer;
  UCcodfis, mese ,CFgiorno, sesso: string;
  CFcognome,  CFnome,  CFanno,  CFmese ,  CFcomune, CFidentif :string;
  CFList : TStringList;
function CovertiCharToStrCF( const cfvar : string): string;
var k,j :integer;
begin
  result := '';
  for j := 1 to length(cfvar) do
  begin
    if not ( cfvar[j] in ['0'..'9']) then
    begin
      for k :=1 to 10 do
      begin
        if cfvar[j]=SostOmonimia[k] then result :=  result +
IntToStr(k-1);
      end;
    end
    else
    begin
      result :=  result + cfvar[j];
    end;
  end;
end;
begin
  CFList := TStringList.Create;
  UCcodfis := trim(CodiceFiscale);
  if  length( UCcodfis) <> 16 then
  begin
    CFList.Add('-1');
    result:= CFList;
    exit;
  end;
  UCcodfis      := trim(uppercase(CodiceFiscale));
  CFcognome     := leftStr(UCcodfis,3);
  CFnome        := midStr(UCcodfis,4,3);
  CFanno        := midStr(UCcodfis,7,2);
  CFmese        := midStr(UCcodfis,9,1);
  CFgiorno      := midStr(UCcodfis,10,2);
  CFcomune      := midStr(UCcodfis,12,4);
  CFidentif     := rightStr(UCcodfis,1);
  // ...in caso di omonimia, ricavo i dati seguenti
  CFanno    := CovertiCharToStrCF(CFanno);
  CFgiorno  := CovertiCharToStrCF(CFgiorno);
  CFcomune  := CFcomune[1]+ CovertiCharToStrCF(rightStr(CFcomune,3));
  // ricavo giorno e sesso
  if  StrToInt(CFgiorno) < 40 then
  begin
    sesso := 'M';
  end
  else
  begin
    sesso := 'F';
    CFgiorno:=  IntToStr(StrToInt(CFgiorno) -40);
  end;
  if  length(CFgiorno)<2 then CFgiorno:= '0'+CFgiorno;
  // ricavo il mese
  for i := 1 to 12 do
  begin
    if CFmese = MesiARR[i] then
    begin
      mese:= IntToStr(i);
      break;
    end;
  end;
  if  length(mese)<2 then mese:= '0'+mese;
  CFList.Add('gg');
  CFList.Add(CFgiorno);
  CFList.Add('mm');
  CFList.Add(mese);
  CFList.Add('aa');
  CFList.Add(CFanno);
  CFList.Add('CodiceBelfioreComune');
  CFList.Add(CFcomune);
  CFList.Add('sesso');
  CFList.Add(sesso);
  result:=  CFList;
end;