📄 unit1.~pas
字号:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
SPComm, StdCtrls;
type
TForm1 = class(TForm)
ComboBox1: TComboBox;
Label1: TLabel;
Button1: TButton;
Comm1: TComm;
Button2: TButton;
ListBox1: TListBox;
Button3: TButton;
Button4: TButton;
Button5: TButton;
Button6: TButton;
Button7: TButton;
procedure Button1Click(Sender: TObject);
procedure Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);
procedure Button2Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure Button6Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button7Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
//-----------------刷IC卡----------------
procedure CardSound;//鸣叫;
procedure FindCard; //寻卡;
procedure downloatPW;//验证密码;
procedure ReadCard;//读卡
procedure CloseCard;//关闭卡
end;
var
Form1: TForm1;
//ictag:Integer;
//-----------------IC卡----------------
iclist:TStringList;//读卡器返回值
ICTag:Integer;//读卡操作表示,1:寻卡,2:验证密码,3:读卡,4:关闭卡
ICSuc:Integer;//读卡操作表示,1:操作成功;2:操作失败;
cardID1,cardID2,cardID3,cardID4:Byte;
cardID:array [0..20] of Byte;
CardI:Integer;
implementation
{$R *.DFM}
//-----------------刷IC卡----------------------------
procedure TForm1.ReadCard;//读卡
var
bufs:Byte;
s:Byte;
a:string;
begin
ListBox1.Items.Add(' ');
ListBox1.Items.Add('======发送读卡命令=========');
ictag:=3;
bufs:=$3C;
s:=bufs;
a:=chr(bufs);
bufs:=4;
s:=s Xor bufs;
a:=a+chr(bufs);
bufs:=1;
s:=s Xor bufs;
a:=a+chr(bufs);
bufs:=$66;
s:=s Xor bufs;
a:=a+chr(bufs);
bufs:=$20;
s:=s Xor bufs;
a:=a+chr(bufs);
bufs:=0;
s:=s Xor bufs;
a:=a+chr(bufs);
a:=a+chr(s);
bufs:=$0D;
a:=a+chr(bufs);
Comm1.WriteCommData(PChar(a),Length(a));
end;
procedure TForm1.CloseCard;//关闭卡
var
bufs:Byte;
s:Byte;
a:string;
begin
ictag:=4;
bufs:=$3C;
s:=bufs;
a:=chr(bufs);
bufs:=$04;
s:=s Xor bufs;
a:=a+chr(bufs);
bufs:=$01;
s:=s Xor bufs;
a:=a+chr(bufs);
bufs:=$68;
s:=s Xor bufs;
a:=a+chr(bufs);
bufs:=$00;
s:=s Xor bufs;
a:=a+chr(bufs);
bufs:=$00;
s:=s Xor bufs;
a:=a+chr(bufs);
a:=a+chr($51);
bufs:=$0D;
a:=a+chr(bufs);
Comm1.WriteCommData(PChar(a),Length(a));
ListBox1.Items.Add(' ');
ListBox1.Items.Add('======发送关闭卡命令=========');
end;
procedure TForm1.downloatPW;//验证密码;
var
bufs:Byte;
s:Byte;
a:string;
begin
ictag:=2;
bufs:=$3C;
s:=bufs;
a:=chr(bufs);
bufs:=$08;
s:=s Xor bufs;
a:=a+chr(bufs);
bufs:=$01;
s:=s Xor bufs;
a:=a+chr(bufs);
bufs:=$6A;
s:=s Xor bufs;
a:=a+chr(bufs);
bufs:=$00; //'模式1
s:=s Xor bufs;
a:=a+chr(bufs);
bufs:=$20;
s:=s Xor bufs;
a:=a+chr(bufs);
bufs:=cardID1;
s:=s Xor bufs;
a:=a+chr(bufs);
bufs:=cardID2 ;
s:=s Xor bufs;
a:=a+chr(bufs);
bufs:=cardID3;
s:=s Xor bufs;
a:=a+chr(bufs);
bufs:=cardID4;
s:=s Xor bufs;
a:=a+chr(bufs);
a:=a+chr(s);
bufs:=$0D;
a:=a+chr(bufs);
Comm1.WriteCommData(PChar(a),Length(a));
ListBox1.Items.Add(' ');
ListBox1.Items.Add('======发送验证密码命令=========');
end;
procedure TForm1.FindCard; //寻卡;
var
bufs:Byte;
s:Byte;
a:string;
begin
ICTag:=1;
bufs:=$3C;
s:=bufs;
a:=chr(bufs);
bufs:=$04;
s:=s Xor bufs;
a:=a+chr(bufs);
bufs:=$01;
s:=s Xor bufs;
a:=a+chr(bufs);
bufs:=$70;
s:=s Xor bufs;
a:=a+chr(bufs);
bufs:=$01; //'模式1
s:=s Xor bufs;
a:=a+chr(bufs);
bufs:=$00;
s:=s Xor bufs;
a:=a+chr(bufs);
a:=a+chr(s);
bufs:=$0D;
a:=a+chr(bufs);
Comm1.WriteCommData(PChar(a),Length(a));
ListBox1.Items.Add(' ');
ListBox1.Items.Add('======发送寻卡卡命令=========');
end;
procedure TForm1.CardSound;//鸣叫;
var
bufs:Byte;
s:Byte;
a:string;
begin
a:='';
bufs:=$3C;
s:=$3C;
a:=chr(bufs);
bufs:=$03;
s:=s Xor bufs;
a:=a+chr(bufs);
bufs:=$01;
s:=s Xor bufs;
a:=a+chr(bufs);
bufs:=$6B;
s:=s Xor bufs;
a:=a+chr(bufs);
bufs:=$10;
s:=s Xor bufs;
a:=a+chr(bufs);
a:=a+chr(s);
bufs:=$0D;
a:=a+chr(bufs);
Comm1.WriteCommData(PChar(a),Length(a));
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Comm1.StopComm;
Comm1.CommName:=Trim(ComboBox1.Text);
Comm1.StartComm;
ListBox1.Items.Clear;
end;
procedure TForm1.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);
type
ss=array[1..500]of char ;
var str1:^ss;
i:integer;
s:array[0..15] of char ;
n:integer;
strlist:TStringList;
cardbh:string;
cardint:Int64;
begin
Application.ProcessMessages;
//iclist.Clear;
strlist:=TStringList.Create; strlist.Clear;
str1:=Buffer;
for i:=0 to 9 do s[i]:=chr(48+i);
for i:=10 to 15 do s[i]:=chr(55+i);
for i:=1 to bufferlength do
begin
n:=ord(str1^[i]);
strlist.add(s[n div 16]+s[n mod 16]);
//iclist.Add(IntToStr(n));
//iclist.Add(IntToHex(n,2));
end;
case ICTag of
1:begin //寻卡;
ListBox1.Items.Add(' ');
ListBox1.Items.Add(strlist.Text);
ListBox1.Items.Add('=========接收寻卡返回值=========');
if (strlist.Strings[0]='3C')and(strlist.Strings[1]='05')and(strlist.Strings[2]<>'FF') then
begin
ICSuc:=0; //Byte(StrToInt('$'+aa));
cardID1:=StrToInt('$'+Trim(strlist.Strings[2]));
cardID2:=StrToInt('$'+trim(strlist.Strings[3]));
cardID3:=StrToInt('$'+trim(strlist.Strings[4]));
cardID4:=StrToInt('$'+trim(strlist.Strings[5]));
cardbh:='';
cardbh:=trim(strlist.Strings[2])
+trim(strlist.Strings[3])
+trim(strlist.Strings[4])
+trim(strlist.Strings[5]);
//cardID[n]:=Byte(StrToInt('$'+trim(iclist.Strings[i])));;
//Inc(n);
cardint:=StrToInt64('$'+cardbh);
cardbh:='';
cardbh:=Trim(FormatFloat('0',cardint));
ListBox1.Items.Add('此卡卡号:'+cardbh);
//ListBox1.Items.Add('==========================');
Sleep(30);
downloatPW;
//CloseCard;
//Sleep(500);
//TimerIC.Enabled:=True;
//ListBox1.Items.Add('========================寻卡2');
end else
begin
Sleep(100);
CloseCard;
Sleep(500);
//TimerIC.Enabled:=True;
ICSuc:=0;
end;
end;
2:begin //验证密码;
ListBox1.Items.Add(' ');
ListBox1.Items.Add(strlist.Text);
ListBox1.Items.Add('=======接收验证密码返回值=======');
if (Trim(strlist.Strings[0])='3C')and(Trim(strlist.Strings[1])='02')and(Trim(strlist.Strings[2])='00') then
begin
Sleep(30);
ReadCard;
ICSuc:=0;
ListBox1.Items.Add('========================验证密码成功!');
end else
begin
ListBox1.Items.Add('========================验证密码失败!');
Sleep(100);
CloseCard;
Sleep(500);
//TimerIC.Enabled:=True;
ICSuc:=0;
end;
end;
3:begin //读卡;
//ShowMessage('读卡1'+strlist.Text);
ListBox1.Items.Add(' ');
ListBox1.Items.Add(strlist.Text);
ListBox1.Items.Add('========接受读卡返回值=========');
if (strlist.Strings[0]='3C')and(strlist.Strings[1]='12')and(strlist.Strings[2]='00') then
begin
ICSuc:=0;
//ListBox1.Items.Add('========================读卡1');
n:=0; cardbh:='';
for i:=3 to strlist.Count-3 do
begin
//if Trim(strlist.Strings[i])<>'20' then
cardbh:=cardbh+trim(strlist.Strings[i]);
//cardID[n]:=Byte(StrToInt('$'+trim(iclist.Strings[i])));;
//Inc(n);
end;
cardint:=StrToInt64('$'+cardbh);
cardbh:='';
cardbh:=Trim(FormatFloat('0',cardint));
ListBox1.Items.Add('卡号:'+cardbh);
ListBox1.Items.Add('===============卡里数据内容====读卡成功!=======');
//DoTmBuf(cardbh);
//CardI:=n-1;
//ShowMessage('读卡2'+strlist.Text);
Sleep(20);
CloseCard;
end else
begin
ListBox1.Items.Add('========================读卡失败!');
Sleep(50);
CloseCard;
Sleep(500);
//TimerIC.Enabled:=True;
ICSuc:=0;
end;
end;
4:begin //关闭卡;
if ICSuc=4 then Exit;
ListBox1.Items.Add(' ');
ListBox1.Items.Add(strlist.Text);
ListBox1.Items.Add('=========接收关闭卡返回值========');
if (strlist.Strings[0]='3C')and(strlist.Strings[1]='02')and(strlist.Strings[2]='00') then
begin
//ListBox1.Items.Add('========================关闭卡1');
Sleep(50);
CardSound;
Sleep(500);
//Comm1.StopComm;
//TimerIC.Enabled:=True;
ICSuc:=4;
end else
begin
//ListBox1.Items.Add('========================关闭卡2');
Sleep(100);
//CloseCard;
Sleep(500);
//TimerIC.Enabled:=True;
ICSuc:=0;
end;
end;
5:begin
ListBox1.Items.Add(' ');
ListBox1.Items.Add(strlist.Text);
ListBox1.Items.Add('=====================单独===寻卡');
if (strlist.Strings[0]='3C')and(strlist.Strings[1]='05')and(strlist.Strings[2]<>'FF') then
begin
ICSuc:=0; //Byte(StrToInt('$'+aa));
cardID1:=StrToInt('$'+Trim(strlist.Strings[2]));
cardID2:=StrToInt('$'+trim(strlist.Strings[3]));
cardID3:=StrToInt('$'+trim(strlist.Strings[4]));
cardID4:=StrToInt('$'+trim(strlist.Strings[5]));
cardbh:='';
cardbh:=trim(strlist.Strings[2])
+trim(strlist.Strings[3])
+trim(strlist.Strings[4])
+trim(strlist.Strings[5]);
//cardID[n]:=Byte(StrToInt('$'+trim(iclist.Strings[i])));;
//Inc(n);
end;
cardint:=StrToInt64('$'+cardbh);
cardbh:='';
cardbh:=Trim(FormatFloat('0',cardint));
ListBox1.Items.Add('此卡卡号:'+cardbh);
ListBox1.Items.Add('=====================单独===寻卡成功');
end;
6:begin //验证密码;
ListBox1.Items.Add(' ');
ListBox1.Items.Add(strlist.Text);
ListBox1.Items.Add('=====================单独===验证密码');
if (strlist.Strings[0]='3C')and(strlist.Strings[1]='02')and(strlist.Strings[2]='00') then
begin
Sleep(30);
ReadCard;
ICSuc:=0;
ListBox1.Items.Add('=====================单独===验证密码成功');
end else
begin
ListBox1.Items.Add('=====================单独===验证密码失败');
Sleep(100);
CloseCard;
Sleep(500);
//TimerIC.Enabled:=True;
ICSuc:=0;
end;
end;
end;
//ShowMessage(strlist.Text);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
//Comm1.StopComm;
//omm1.StartComm;
FindCard;
end;
procedure TForm1.Button5Click(Sender: TObject);
var
bufs:Byte;
s:Byte;
a:string;
begin
ictag:=3;
bufs:=$3C;
s:=bufs;
a:=chr(bufs);
bufs:=4;
s:=s Xor bufs;
a:=a+chr(bufs);
bufs:=1;
s:=s Xor bufs;
a:=a+chr(bufs);
bufs:=$66;
s:=s Xor bufs;
a:=a+chr(bufs);
bufs:=$20;
s:=s Xor bufs;
a:=a+chr(bufs);
bufs:=0;
s:=s Xor bufs;
a:=a+chr(bufs);
a:=a+chr(s);
bufs:=$0D;
a:=a+chr(bufs);
Comm1.WriteCommData(PChar(a),Length(a));
end;
procedure TForm1.Button6Click(Sender: TObject);
var
bufs:Byte;
s:Byte;
a:string;
begin
//ictag:=4;
bufs:=$3C;
s:=bufs;
a:=chr(bufs);
bufs:=$04;
s:=s Xor bufs;
a:=a+chr(bufs);
bufs:=$01;
s:=s Xor bufs;
a:=a+chr(bufs);
bufs:=$68;
s:=s Xor bufs;
a:=a+chr(bufs);
bufs:=$00;
s:=s Xor bufs;
a:=a+chr(bufs);
bufs:=$00;
s:=s Xor bufs;
a:=a+chr(bufs);
a:=a+chr($51);
bufs:=$0D;
a:=a+chr(bufs);
Comm1.WriteCommData(PChar(a),Length(a));
end;
procedure TForm1.Button4Click(Sender: TObject);
var
bufs:Byte;
s:Byte;
a:string;
begin
ictag:=6;
bufs:=$3C;
s:=bufs;
a:=chr(bufs);
bufs:=$08;
s:=s Xor bufs;
a:=a+chr(bufs);
bufs:=$01;
s:=s Xor bufs;
a:=a+chr(bufs);
bufs:=$6A;
s:=s Xor bufs;
a:=a+chr(bufs);
bufs:=$00; //'模式1
s:=s Xor bufs;
a:=a+chr(bufs);
bufs:=$20;
s:=s Xor bufs;
a:=a+chr(bufs);
bufs:=cardID1;
s:=s Xor bufs;
a:=a+chr(bufs);
bufs:=cardID2;
s:=s Xor bufs;
a:=a+chr(bufs);
bufs:=cardID3;
s:=s Xor bufs;
a:=a+chr(bufs);
bufs:=cardID4;
s:=s Xor bufs;
a:=a+chr(bufs);
a:=a+chr(s);
bufs:=$0D;
a:=a+chr(bufs);
Comm1.WriteCommData(PChar(a),Length(a));
end;
procedure TForm1.Button3Click(Sender: TObject);
var
bufs:Byte;
s:Byte;
a:string;
begin
ICTag:=5;
bufs:=$3C;
s:=bufs;
a:=chr(bufs);
bufs:=$04;
s:=s Xor bufs;
a:=a+chr(bufs);
bufs:=$01;
s:=s Xor bufs;
a:=a+chr(bufs);
bufs:=$70;
s:=s Xor bufs;
a:=a+chr(bufs);
bufs:=$01; //'模式1
s:=s Xor bufs;
a:=a+chr(bufs);
bufs:=$00;
s:=s Xor bufs;
a:=a+chr(bufs);
a:=a+chr(s);
bufs:=$0D;
a:=a+chr(bufs);
Comm1.WriteCommData(PChar(a),Length(a));
end;
procedure TForm1.Button7Click(Sender: TObject);
begin
ListBox1.Items.Clear;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -