📄 zk_u.pas
字号:
unit zk_u;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons, Mask, ComCtrls, ExtCtrls,strutils;
type
Tfrm_zk = class(TForm)
GroupBox1: TGroupBox;
rdb_danzhang: TRadioButton;
rdb_duozhang: TRadioButton;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
zk_bt: TBitBtn;
BitBtn1: TBitBtn;
kh_MaskEdit: TMaskEdit;
skh_MaskEdit: TMaskEdit;
wkh_MaskEdit: TMaskEdit;
Label4: TLabel;
zk_Panel: TPanel;
jdt_ProgressBar: TProgressBar;
xkjd_Label: TLabel;
zks_Label: TLabel;
dqks_Label: TLabel;
dqkh_Label: TLabel;
zks_Edit: TEdit;
dqks_Edit: TEdit;
dqkh_Edit: TEdit;
Label5: TLabel;
kxdh_ComboBox: TComboBox;
xkzt_Label: TLabel;
xkzt_Edit: TEdit;
procedure zk_btClick(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure BitBtn1Click(Sender: TObject);
procedure rdb_danzhangEnter(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure kxdh_ComboBoxChange(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
frm_zk: Tfrm_zk;
implementation
uses public_u, surehope_api, sfsb_u, DES;
{$R *.dfm}
procedure Tfrm_zk.BitBtn1Click(Sender: TObject);
begin
close;
end;
procedure Tfrm_zk.FormClose(Sender: TObject; var Action: TCloseAction);
begin
self.Free;
end;
procedure Tfrm_zk.FormCreate(Sender: TObject);
begin
zk_panel.Visible:=false; //隐藏制多张卡,进度面板
kxdh_combobox.Text:=cardtype_str(cardtype_num_v);
end;
procedure Tfrm_zk.kxdh_ComboBoxChange(Sender: TObject);
begin
cardtype_num_v:=cardtype_num(kxdh_combobox.Text);
frm_sfsb.ADOTable1.Edit; //把卡型代码字符提交到数据库
frm_sfsb.ADOTable1.FieldByName('cardtype').AsString:=kxdh_combobox.Text;
frm_sfsb.ADOTable1.Post;
end;
procedure Tfrm_zk.rdb_danzhangEnter(Sender: TObject);
begin
zk_panel.Visible:=false; //隐藏制多张卡,进度面板
end;
procedure Tfrm_zk.zk_btClick(Sender: TObject);
var
Buf_ascii:array[0..16] of char; // 150个字符串缓冲区
buf_hex:array[0..300] of char; //300个HEX数据缓冲区
kh_DES,en_strhex,skh_str:string;
ii,cardcount,skh,wkh,kh_length:integer;
begin
if rdb_danzhang.Checked=true then //制单张卡
begin
if trim(kh_maskedit.Text)='' then
begin
messagebox(0,'请输入卡号!','警告提示',mb_iconwarning+mb_ok);
exit;
end;
if openport()=1 then exit; //操作失败则退出
kh_length:=length(trim(kh_maskedit.Text));
kh_length_filter_xk(kh_length,buf_hex); //根据卡号长度处理卡号长度的取值,如果不满10则取第2位数,否则两位数都取.
kh_DES:='sunrise'; //DES密钥
en_strhex:=encrystrhex(kh_maskedit.Text,kh_des); //返回卡号加密8字节的16个HEX字符
strpcopy(buf_ascii,en_strhex); //把加密卡号写入IC卡1区0-7位置(8字节)字符串数组缓冲区
if (Wr_asc(1,0,8,Buf_ascii)=SURE_HOPE_OK) and (wr_asc(1,13,1,buf_hex)=sure_hope_ok) then
begin
MessageBox(0,'写卡成功!',pchar('卡号:'+kh_maskedit.text),mb_iconinformation+mb_ok);
end
else
MessageBox(0,'写卡失败!','写卡',mb_iconerror+mb_ok);
Close_com; //关闭串口
end;
//制多张卡
if rdb_duozhang.Checked=true then
begin
//showmessage('duo'+skh_maskedit.Text+'1');
if (trim(skh_maskedit.Text)='') or (trim(wkh_maskedit.Text)='') then
begin
messagebox(0,'请输入首卡号或尾卡号!','警告提示',mb_iconwarning+mb_ok);
exit;
end;
if openport()=1 then exit; //操作失败则退出
skh:=strtoint(skh_maskedit.text);
wkh:=strtoint(wkh_maskedit.Text);
cardcount:=wkh-skh+1;
kh_length:=length(kh_maskedit.Text);
zk_panel.Visible:=true; //显示制多张卡,进度面板
zks_edit.Text:=inttostr(cardcount); //总卡数
kh_length_filter_xk(kh_length,buf_hex); //根据卡号长度处理卡号长度的取值,如果不满10则取第2位数,否则两位数都取.
kh_DES:='sunrise'; //DES密钥
ii:=1;
while ii<=cardcount do
begin
Close_com; //关闭串口
if openport()=1 then
begin
if messagebox(0,'是否跳过当前卡号?(同时请取走出错的卡片)','提示信息',mb_iconquestion+mb_yesno)=IDYES then
begin
skh:=skh+1;
cardcount:=cardcount-1;
end;
if ii>cardcount then
begin
jdt_progressbar.Position:=trunc((ii/cardcount)*100); //进度条位置
break;
end;
openport();
end;
skh_str:=inttostr(skh);
en_strhex:=encrystrhex(skh_str,kh_des); //返回加密卡号8字节的16个HEX字符
strpcopy(buf_ascii,en_strhex);
if (Wr_asc(1,0,8,Buf_ascii)=SURE_HOPE_OK) and (wr_asc(1,13,1,buf_hex)=sure_hope_ok) then
begin
xkzt_Label.Refresh;
xkjd_Label.Refresh;
jdt_progressbar.Position:=trunc((ii/cardcount)*100); //进度条位置
zks_edit.Refresh;
zks_label.Refresh;
dqks_label.Refresh;
dqkh_label.Refresh;
dqks_edit.Text:=inttostr(ii); //当前卡数
dqks_edit.Refresh;
dqkh_edit.Text:=skh_str; //当前卡号
dqkh_edit.Refresh;
if ii<>cardcount then
begin
//MessageBox(0,'写卡成功,请插入下一张卡!',pchar(khstr),mb_iconinformation+mb_ok)
beep; //制卡成功使喇叭发声
repeat //判断是否已取卡
xkzt_edit.Text:='请取卡!';
xkzt_edit.Refresh;
sleep(50);
until Power_on<>SURE_HOPE_OK;
repeat //判断是否已插卡
xkzt_edit.Text:='请插卡!';
xkzt_edit.Refresh;
sleep(50);
until Power_on=SURE_HOPE_OK;
end
else
begin
MessageBox(0,pchar('恭喜您制完:'+inttostr(cardcount)+'张卡片!'),'制卡',mb_iconinformation+mb_ok);
zk_panel.Visible:=false; //隐藏制多张卡,进度面板
end;
skh:=skh+1;
ii:=ii+1;
end
else
begin
MessageBox(0,'写卡失败,请重新插卡','错误提示',mb_iconerror+mb_ok);
end;
end; //循环结束语句
Close_com; //退出循环时关闭串口
end;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -