unit CodFisc;
interface
uses
Windows, CodFiscImp, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls, jpeg, Menus;
type
TCodiceFiscale = class(TForm)
Panel1: TPanel;
Panel2: TPanel;
Cognome: TEdit;
Nome: TEdit;
Anno: TEdit;
Mese: TComboBox;
Giorno: TComboBox;
Sesso: TComboBox;
CODIC: TEdit;
Panel5: TPanel;
Panel3: TPanel;
Calcola: TButton;
Panel6: TPanel;
Panel4: TPanel;
Esci: TButton;
Panel7: TPanel;
Timer1: TTimer;
MainMenu1: TMainMenu;
File1: TMenuItem;
Close1: TMenuItem;
Info1: TMenuItem;
Disclamer1: TMenuItem;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Image1: TImage;
Provincia: TEdit;
Scadenza: TLabel;
Comune: TComboBox;
procedure CalcolaClick(Sender: TObject);
procedure EsciClick(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure Disclamer1Click(Sender: TObject);
procedure Close1Click(Sender: TObject);
procedure Label2Click(Sender: TObject);
procedure Label1Click(Sender: TObject);
procedure CognomeClick(Sender: TObject);
procedure NomeClick(Sender: TObject);
procedure AnnoClick(Sender: TObject);
procedure ComuneClick(Sender: TObject);
procedure GiornoClick(Sender: TObject);
procedure MeseClick(Sender: TObject);
procedure SessoClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
const
CRLF = #13 + #10;
var
CodiceFiscale: TCodiceFiscale;
x,i,lungcom,lng4,Scad: integer;
comuneprov,l1,Scadtmp,Scadtmp1,Scadtmp2,Scad1:string;
implementation
{$R *.dfm}
procedure TCodiceFiscale.EsciClick(Sender: TObject);
begin
showmessage('Grazie per aver utilizzato il programma e arrivederci');
close;
end;
procedure TCodiceFiscale.CalcolaClick(Sender: TObject);
var errore,inesistente,bisestile:boolean;
year,month,day,limmin,limmax,lenganno,lengmese,lenggiorno,testlong:integer;
begin
errore:=false;
inesistente:=false;
bisestile:=false;
{controlla se il sesso è corretto}
if (Sesso.text<>'M') and (Sesso.text<>'F') or (Comune.text='Comune') or (Nome.text='Nome') or (Cognome.text='Cognome') or (Giorno.text='Giorno') or (Mese.text='Mese') or (Anno.text='Anno') or (Comune.text='') or (Nome.text='') or (Cognome.text='') or (Giorno.text='') or (Mese.text='') or (Anno.text='') then
begin
errore:=true;
end;
{imposto i limiti massimi per la data}
if (Anno.text>'9999') or (Anno.text<'1500') then
begin
inesistente:=true;
end;
{controllo la validità dell data, tenendo conto se l'anno in questione è bisestile o meno}
if (errore=false) and (inesistente=false) then
begin
limmin:=1;
try
year:=strtoint(Anno.text);
month:=strtoint(Mese.text);
day:=strtoint(Giorno.text);
except
on EConvertError do
errore:=true;
end;
end;
{controllo se l'anno è bisestile}
if ((year mod 4=0) and ((year mod 100<>0) or (year mod 400=0))) then
begin
bisestile:=true;
end;
case month of
2:
begin
if (bisestile=false) then
begin
limmax:=28;
end;
if (bisestile=true) then
begin
limmax:=29;
end;
end;
4,6,9,11:
begin
limmax:=30;
end;
1,3,5,7,8,10,12:
begin
limmax:=31;
end;
end;
if ((day<limmin) or (day>limmax)) then
begin
inesistente:=true;
end;
if ((errore=true) and (inesistente=false)) then
begin
showmessage('Dati non completi.Controllare i dati.');
end;
if ((inesistente=true) and (errore=false)) then
begin
showmessage('Dati non validi.Controllare i dati.');
end;
if ((inesistente=true) and (errore=true)) then
begin
showmessage('Dati incompleti e/o non validi.Controllare i dati.');
end;
{ passaggio dati globali }
codic.Text:='';
codfiscimp.cognome:=Cognome.Text; { cognome }
codfiscimp.nome:=nome.Text; { nome }
codfiscimp.anno:=Anno.Text; { anno }
val(mese.Text,codfiscimp.g,x); { mese }
val(giorno.Text,codfiscimp.gio,x); { giorno }
if Sesso.Text='M' then
begin
codfiscimp.maschio:=true
end { sesso }
else
begin
codfiscimp.maschio:=false;
end;
codfiscimp.comu:=comune.text;
Main_control();
if (errore=false) and (inesistente=false) then
begin
for i:=1 to 16 do
begin
codic.Text:=codic.text+codfiscimp.codice[i];
comuneprov:=Comune.text;
lungcom:=(Length(Comune.text)-9);
l1:=copy(comuneprov,lungcom,2);
Provincia.text:=l1;
testlong:=Length(CODIC.text);
end;
if (testlong<>16) then //ulteriore controllo se il codice fiscale è corretto
begin
CODIC.text:='ERRORE: Controllare i dati!';
end;
end;
end;
procedure TCodiceFiscale.Timer1Timer(Sender: TObject);
begin
Label2.caption:=timetostr(time); //serve per calcolare la data di scadenza della carta d'identità
Scadtmp:=datetostr(date);
lng4:=((length(Scadtmp))-3);
Scadtmp1:=copy(Scadtmp,lng4,4);
Scad:=((strtoint(Scadtmp1))+5);
Scad1:=(inttostr(Scad));
Scadtmp2:=Scadtmp;
Delete(Scadtmp2,lng4,4);
insert(Scad1,Scadtmp2,lng4);
Scadenza.caption:=Scadtmp2;
end;
procedure TCodiceFiscale.Disclamer1Click(Sender: TObject);
begin
showmessage('Il codice fiscale viene calcolato mediante le modalità di calcolo descritte' + #10 + #13 +
'dal Decreto ministeriale del Ministero delle Finanze del 23 dicembre 1976 '+ #10 + #13 +
'''Sistemi di codificazione dei soggetti da iscrivere all''anagrafe tributaria'' (GU n. 345 del 29-12-1976).' + #10 + #13 +
'In caso omocodia il codice fiscale viene modificato arbitrariamente dall''Agenzia delle Entrate'+ #10 + #13 +
'e quindi il codice calcolato dal programma non può esser ritenuto valido.'+ #10 + #13 +
'Il codice fiscale generato è quindi corretto sotto il punto di vista formale ma potrebbe non corrispondere realmente alla persona indicata.'+ #10 + #13 +
''+ #10 + #13 +
' K.Mitnick.');
end;
procedure TCodiceFiscale.Close1Click(Sender: TObject);
begin
showmessage('Grazie per aver utilizzato il programma e arrivederci');
halt;
end;
procedure TCodiceFiscale.Label2Click(Sender: TObject);
var msg:string;
begin
msg:=label1.caption+' '+label2.caption;
showmessage(msg);
end;
procedure TCodiceFiscale.Label1Click(Sender: TObject);
var msg:string;
begin
msg:=label1.caption+' '+label2.caption;
showmessage(msg);
end;
procedure TCodiceFiscale.CognomeClick(Sender: TObject);
begin
Cognome.text:='';
end;
procedure TCodiceFiscale.NomeClick(Sender: TObject);
begin
Nome.text:='';
end;
procedure TCodiceFiscale.AnnoClick(Sender: TObject);
begin
Anno.text:='';
end;
procedure TCodiceFiscale.ComuneClick(Sender: TObject);
begin
Comune.text:='';
end;
procedure TCodiceFiscale.GiornoClick(Sender: TObject);
begin
Giorno.text:='';
end;
procedure TCodiceFiscale.MeseClick(Sender: TObject);
begin
Mese.text:='';
end;
procedure TCodiceFiscale.SessoClick(Sender: TObject);
begin
Sesso.text:='';
end;
end.