Személyi azonosítók ellenőrzése
Gyakran előfordul, hogy személyekkel
kapcsolatos adatok között számszerű azonosítókat is rögzíteni kell. A helyes
adatrögzítést segítendő, a bevitel után célszerű az azonosító helyességének
ellenőrzése. Erre mutat lehetőséget ez a program, hiszen minden azonosító
utolsó számjegye egy kontrol számjegy, mely előzőkből egyszerű matematikai
műveletekkel származtatható.
A program futási képe:
A program listája:
unit USzemAzon;
interface
uses
Windows, Messages, SysUtils, Variants, Classes,
Graphics, Controls, Forms, Dialogs, StdCtrls;
type
TfmSzemAzon = class(TForm)
lbSzemAzon: TLabel;
lbKIR: TLabel;
edKIR: TEdit;
lbTAJ: TLabel;
edTAJ: TEdit;
lbAdo: TLabel;
edAdo: TEdit;
lbSzemSzam: TLabel;
edSzemSzam: TEdit;
btKIR: TButton;
btTAJ: TButton;
btAdo: TButton;
btSzemSzam: TButton;
edKIREr: TEdit;
edTAJEr: TEdit;
edAdoEr: TEdit;
edSzemSzamEr: TEdit;
btKilepes: TButton;
procedure btKilepesClick(Sender: TObject);
procedure btKIRClick(Sender: TObject);
procedure btTAJClick(Sender: TObject);
procedure btAdoClick(Sender: TObject);
procedure btSzemSzamClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
St11=String[11];
St10=String[10];
St9=String[9];
var
fmSzemAzon: TfmSzemAzon;
implementation
{$R *.dfm}
procedure TfmSzemAzon.btKilepesClick(Sender: TObject);
begin
Close;
end;
Function JoKIR(S: St11): Boolean;
Var I, N: Word;
Begin
JoKIR:= False; If Length(S)<>11 Then Exit;
For I:= 1 To 11 Do If Not(S[I] In ['0'..'9']) Then
Begin Break; Exit End;
N:= 0; For I:= 1 To 10 Do N:= N+I*StrToInt(S[I]);
JoKIR:= (N Mod 11)=StrToInt(S[11]);
End;
Function JoTAJ(S: St9): Boolean;
Var I, N: Word;
Begin
JoTAJ:= False; If Length(S)<>9 Then Exit;
For I:= 1 To 9 Do If Not(S[I] In ['0'..'9']) Then
Begin Break; Exit End;
N:= 3*StrToInt(S[1])+
7*StrToInt(S[2])+
3*StrToInt(S[3])+
7*StrToInt(S[4])+
3*StrToInt(S[5])+
7*StrToInt(S[6])+
3*StrToInt(S[7])+
7*StrToInt(S[8]);
JoTAJ:= (N Mod 10)=StrToInt(S[9]);
End;
Function JoAdo(S: St10): Boolean;
Var I, N: Word;
Begin
JoAdo:= False; If Length(S)<>10 Then Exit;
For I:= 1 To 10 Do If Not(S[I] In ['0'..'9']) Then
Begin Break; Exit End;
N:= 0; For I:= 1 To 9 Do N:= N+I*StrToInt(S[I]);
JoAdo:= (N Mod 11)=StrToInt(S[10]);
End;
Function JoSzemSzam(S: St11): Boolean;
Var I, N: Word;
begin
JoSzemSzam:= False; If Length(S)<>11 Then Exit;
For I:= 1 To 11 Do If Not(S[I] In ['0'..'9']) Then
Begin Break; Exit End;
N:= 0; For I:= 1 To 10 Do N:= N+I*StrToInt(S[I]);
JoSzemSzam:= (N Mod 11)=StrToInt(S[11]);
end;
procedure TfmSzemAzon.btKIRClick(Sender: TObject);
begin
If JoKir(edKIR.Text) Then edKIREr.Text:= 'Igen' Else
edKIREr.Text:= 'Nem';
end;
procedure TfmSzemAzon.btTAJClick(Sender: TObject);
begin
If JoTAJ(edTAJ.Text) Then edTAJEr.Text:= 'Igen' Else
edTAJEr.Text:= 'Nem';
end;
procedure TfmSzemAzon.btAdoClick(Sender: TObject);
begin
If JoAdo(edAdo.Text) Then edAdoEr.Text:= 'Igen' Else
edAdoEr.Text:= 'Nem';
end;
procedure TfmSzemAzon.btSzemSzamClick(Sender: TObject);
begin
If JoSzemSzam(edSzemSzam.Text) Then edSzemSzamEr.Text:= 'Igen'
Else edSzemSzamEr.Text:= 'Nem';
end;
end.