Newsgroup: it.comp.lang.delphi
Titolo: Codice Fiscale...Dove?

Un saluto a tutto il ns...ho fatto varie ricerche sia su delphi super page
che su torry....ma niente, qualcuno sa indicarmi se esiste in giro qualche
routine per il calcolo del codice fiscale?...ne ho già sviluppata una con
Clipper...spero che non dovrò fare la stessa cosa con delphi!!!...grazie
1000 in anticipo...

 ha scritto nel messaggio
news:9aq1k3$s1p$1...@fe2.cs.interbusiness.it...


Mi pare non funzioni!!!
Robin


Mi pare non funzioni!!!
a me funziona (mancava un punto e virgola ma niente di che...)
pero'... Qualcuno ha una lista dei comuni e dei relativi codici? ^^;
-- 
Claudio "Elder" Bertoli

 wrote in message
um09dtoi2kkss3c0v...@4ax.com...


Ciao... ho fatto alcune prove e a dir la verità la routine funziona ma
sbagliava il calcolo dei primi 6 caratteri...l' ho modificata e funziona in
modo corretto...anche se bisogna mettere un controllo sui parametri passati
in modo da controllare che non siano null...
P.s. se vi serve il file DBF con i codici di tutti i comuni d'Italia
...ditemelo
Ciao
Function GetCodiceFiscale(const nome,cognome:string;const
nascita:Tdate;const sesso,comune:string):string;
const vocali:set of char=['A','E','I','O','U'];
      mesi:string='ABCDEHLMPRST';
      CRCN:array[1..10 ]of byte=(1,0,5,7,9,13,15,17,19,21);
      CRCL:array[1..26 ]of
byte=(1,0,5,7,9,13,15,17,19,21,2,4,18,20,11,3,6,8,12,14,16,10,22,25,24,23);
var
    a,m,d:word;
    somma,c,z,k,x,y,w:integer;
    x1,y1,z1,k1: Array of String;
    s,L,Nom,Cog:String;
begin
SetLength(x1,15);
SetLength(y1,15);
SetLength(z1,15);
SetLength(k1,15);
Result := '';
z := 0;
k := 0;
x := 0;
y := 0;
 Nom:=UpperCase(Trim(Nome));
 while Pos(#32,Nom) <> 0 do
   Delete(Nom,Pos(#32,Nom),1);
 Cog:=UpperCase(Trim(Cognome));
 while Pos(#32,Cog) <> 0 do
   Delete(Cog,Pos(#32,Cog),1);
For w := 1 to Length(Nom) do
 begin
  L := Copy(Nom,w,1);
  IF L[1] in['A'..'Z'] then
    begin
     IF (not(L[1] in vocali)) Then
       begin
        Inc(z,1);
        x1[z] := L;
       end
     Else
       begin
        Inc(k,1);
        y1[k] := L;
       end;
    end;
 End;
For w := 1 to Length(Cog) do
 begin
  L := Copy(Cog,w,1);
  IF L[1] in['A'..'Z'] then
    begin
     IF (not(L[1] in vocali)) Then
       begin
        Inc(x,1);
        z1[x] := L;
       end
     Else
       begin
        Inc(y,1);
        k1[y] := L;
       end;
    end;
 end;
Nom := '';
Cog := '';
IF x >= 3 Then
  Cog := z1[1] + z1[2] + z1[3];
IF x = 2 Then
  Cog := z1[1] + z1[2] + k1[1];
IF (x = 1) and (y >= 2) Then
  Cog := z1[1] + k1[1] + k1[2];
IF (x = 1) and (y = 1) Then
  Cog := z1[1] + k1[1] + 'X';
IF (x = 0) and (y = 2) Then
  Cog := x1[1] + k1[2] + 'X';
IF z >= 4 Then
  Nom := x1[1] + x1[3] + x1[4];
IF z = 3 Then
  Nom := x1[1] + x1[2] + x1[3];
IF z = 2 Then
  Nom := x1[1] + x1[2] + y1[1];
IF (z = 1) and (k >= 2) Then
  Nom := x1[1] + y1[1] + y1[2];
IF (z = 1) and (k = 1) Then
  Nom := x1[1] + y1[1] + 'X';
IF (z = 0) and (k = 2) Then
  Nom := y1[1] + y1[2] + 'X';
Result := Cog + Nom;
DecodeDate(nascita,a,m,d);
IF sesso = 'F' then inc(d,40);
s := IntToStr(d);
IF Length(s) = 1 then s := '0' + s;
result := result + copy(IntToStr(a),3,2) + mesi[m] + s + comune;
// del carattere di controllo
somma := 0;
for c:=1 to length(result) do
  IF not (odd(c)) then
   begin
    IF result[c] in['A'..'Z'] then Inc(somma,Ord(result[c]) - 65)
     Else Inc(somma, Ord(result[c]) - 48)
   end
  Else
   IF result[c] in['A'..'Z'] then Inc(somma, CRCL[Ord(result[c]) - 64])
    Else Inc(somma, CRCN[Ord(result[c]) - 47]);
result := result + Chr(65 +(somma mod 26));
end;

Io mi sono fatto questa Funzione:
Non so dove, ma sono sicuro che c'e' un errore in quella funzione ^^;
Mi e' capitato di doverlo calcolare per una ragazza che si chiama
Beatrice.
La funzione riporta nel codice le lettere "BTR", mentre il programma
CreaCod4 (che suppongo esegua il calcolo nel modo corretto!) riporta
"BRC".
Allo stesso modo anche con il nome "Nicoletta", questa funzione
riporta "NCL", mentre CreaCod mi da' "NLT" (e di questo sono sicuro
che sia corretto, perche' e' lo stesso che risulta sul tesserino di
questa mia amica...).
Il problema ritorna quello di prima:
Qualcuno ha l'algoritmo corretto? ^__^
-- 
Claudio "Elder" Bertoli

 ha scritto nel messaggio
news:pgivht4ioni0jj99v...@4ax.com...


dovute a casi omonimia
questo e' vero ma...
come mai CreaCod mi prende lettere diverse da quelle della funzione di
Matteo?
E' questo che non riesco a capire! ^_^
-- 
Claudio "Elder" Bertoli

 wrote in message
news:bop1itcncviki22la...@4ax.com...
