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.