-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathFauthentication.pas
More file actions
213 lines (189 loc) · 6.06 KB
/
Fauthentication.pas
File metadata and controls
213 lines (189 loc) · 6.06 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
unit Fauthentication;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ZKFPEngXControl_TLB, ExtCtrls, OleCtrls, WideStrings;
type
TForm1 = class(TForm)
ZKFPEngX1: TZKFPEngX;
InitDeviceBtn: TButton;
SensorNum: TEdit;
PanelStatus: TPanel;
SensorIndex: TEdit;
SensorSN: TEdit;
RegisterBtn: TButton;
firstName: TEdit;
Label1: TLabel;
StatusBar: TListBox;
procedure InitDeviceBtnClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure RegisterBtnClick(Sender: TObject);
procedure ZKFPEngX1Enroll(ASender: TObject; ActionResult: WordBool;
ATemplate: OleVariant);
procedure ZKFPEngX1Capture(ASender: TObject; ActionResult: WordBool;
ATemplate: OleVariant);
procedure ZKFPEngX1FeatureInfo(ASender: TObject; AQuality: Integer);
procedure ZKFPEngX1ImageReceived(ASender: TObject;
var AImageValid: WordBool);
procedure SaveToFile(str: WideString);
private
fpcHandle: Integer;
sRegTemplate: WideString;
sRegTemplate10: WideString;
FID: Integer;
strArray : Array[1..100,1..2] of String;
keyTemp, nameTemp: WideString;
const EngineVersion: WideString = '10';
public
{ Public declarations }
end;
var
Form1: TForm1;
DeviceStatus: Boolean = False;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
DeviceStatus := False;
PanelStatus.Color := clRed;
fpcHandle := ZKFPEngX1.CreateFPCacheDB;
FID:=1;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
ZKFPEngX1.FreeFPCacheDB(fpcHandle);
ZKFPEngX1.EndEngine();
end;
procedure TForm1.InitDeviceBtnClick(Sender: TObject);
var f: TextFile; // файл
fName: String; // имя файла
begin
if ZKFPEngX1.InitEngine = 0 then begin
ZKFPEngX1.FPEngineVersion := EngineVersion;
SensorNum.Text := IntToStr(ZKFPEngX1.SensorCount);
SensorIndex.Text := IntToStr(ZKFPEngX1.SensorIndex);
SensorSN.Text := ZKFPEngX1.SensorSN;
PanelStatus.Color := clLime;
fName:='data.txt';
AssignFile(f, fName);
Reset(f);
While not EOF(f) do // пока не конец файла делать цикл:
begin
readLn(f, keyTemp);
readLn(f, nameTemp);
strArray[FID,1] := keyTemp;
strArray[FID,2] := nameTemp;
ZKFPEngX1.AddRegTemplateStrToFPCacheDB(fpcHandle, FID, keyTemp);
Inc(FID);
end;
Flush(f);
CloseFile(f);
InitDeviceBtn.Enabled := False;
RegisterBtn.Enabled := True;
StatusBar.Items.Add('Init device OK!');
end;
end;
procedure TForm1.RegisterBtnClick(Sender: TObject);
begin
if (firstName.Text = '') then begin
MessageDlg('Please enter first name ', mtInformation, [mbOK], 0);
Exit;
end;
ZKFPEngX1.CancelEnroll;
ZKFPEngX1.EnrollCount := 3;
ZKFPEngX1.BeginEnroll;
StatusBar.Items.Add('Register start');
end;
procedure TForm1.ZKFPEngX1Capture(ASender: TObject; ActionResult: WordBool; ATemplate: OleVariant);
var
ID: Integer;
Score, ProcessNum: Integer;
j: Integer;
msg: String;
begin
StatusBar.Items.Add('Check Register');
ProcessNum := 0;
Score := 8;
ID := ZKFPEngX1.IdentificationInFPCacheDB(fpcHandle, ATemplate, Score, ProcessNum);
if ID = -1 then
MessageDlg('Помилка скану відпечатка!Score = ' + IntToStr(Score) + ' Processed Number = ' + IntToStr(ProcessNum), mtInformation, [mbOK], 0)
else begin
for j := 1 to Length(strArray) do begin
if(j = ID) then begin
msg := 'Identify Succeed! Hello ' + strArray[ID,2] + ' your finger ID = '+ IntToStr(ID) + ' Score = ' + IntToStr(Score) + ' Processed Number = ' + IntToStr(ProcessNum);
MessageDlg(msg, mtInformation, [mbOK], 0);
Exit;
end;
end;
end;
end;
procedure TForm1.ZKFPEngX1Enroll(ASender: TObject; ActionResult: WordBool; ATemplate: OleVariant);
var ID: Integer;
Score, ProcessNum: Integer;
begin
if (not ActionResult) then
MessageDlg('Register failed', mtError, [mbOK], 0)
else begin
ProcessNum := 0;
Score := 8;
ID := ZKFPEngX1.IdentificationInFPCacheDB(fpcHandle, ATemplate, Score, ProcessNum);
if(ID > 0) then begin
MessageDlg('This finger exist', mtError, [mbOK], 0);
Exit;
end;
//After enroll, you can get 9.0&10.0 template at the same time
sRegTemplate := ZKFPEngX1.GetTemplateAsStringEx('9');
sRegTemplate10 := ZKFPEngX1.GetTemplateAsStringEx('10');
if(Length(sRegTemplate) > 0) then begin
if(Length(sRegTemplate10) > 0) then
ZKFPEngX1.AddRegTemplateStrToFPCacheDB(fpcHandle, FID, sRegTemplate10)
else
MessageDlg('Register 10.0 failed, template length is zero', mtError, [mbOK], 0);
SaveToFile(sRegTemplate10);
strArray[FID,1] := sRegTemplate10;
strArray[FID,2] := firstName.Text;
Inc(FID);
StatusBar.Items.Add('Register success');
end else
MessageDlg('Register Failed, template length is zero', mtError, [mbOK], 0)
end;
end;
procedure TForm1.ZKFPEngX1FeatureInfo(ASender: TObject; AQuality: Integer);
var
sTemp: string;
begin
sTemp := '';
if ZKFPEngX1.IsRegister then
sTemp := 'Register Status: still press finger ' + IntToStr(ZKFPEngX1.EnrollIndex) + ' times!';
sTemp := sTemp + ' Fingerprint quality';
if AQuality <> 0 then
sTemp := sTemp + ' not good, quality=' + IntToStr(ZKFPEngX1.LastQuality)
else
sTemp := sTemp + ' good, quality=' + IntToStr(ZKFPEngX1.LastQuality);
StatusBar.Items.Add(sTemp);
end;
procedure TForm1.ZKFPEngX1ImageReceived(ASender: TObject; var AImageValid: WordBool);
begin
with ZKFPEngX1 do
PrintImageAt(Self.Canvas.Handle, 500, 10, ImageWidth, ImageHeight);
end;
procedure TForm1.SaveToFile(str:WideString);
var
f:TextFile;
FileDir:String;
begin
FileDir:='data.txt';
AssignFile(f,FileDir);
if not FileExists(FileDir) then
begin
Rewrite(f);
CloseFile(f);
end;
Append(f);
Writeln(f,str);
Writeln(f,firstName.Text);
Flush(f);
CloseFile(f);
end;
end.