5,392
社区成员
发帖
与我相关
我的任务
分享
// 写卡
procedure TPCH_Write_IC_Card4428.btn_WriteCardClick(Sender: TObject);
var CardMain_temp:string[6];
CardMainNo:string[6];
CardFirstNo:string[4];
CardEndNo:string[2];
M_WriteCardNum:string[22];
A_WriteCardNum:string[24];
begin
CardMain_temp:=IntToStr(StrToInt(edt_CardMainNo.Text)+ClickNum);
if Length(CardMain_temp)=1 then
CardMainNo:='00000'+string(CardMain_temp)
else
begin
if Length(CardMain_temp)=2 then
CardMainNo:='0000'+string(CardMain_temp)
else
begin
if Length(CardMain_temp)=3 then
CardMainNo:='000'+string(CardMain_temp)
else
begin
if Length(CardMain_temp)=4 then
CardMainNo:='00'+string(CardMain_temp)
else
begin
if Length(CardMain_temp)=5 then
CardMainNo:='0'+string(CardMain_temp)
else
CardMainNo:=string(CardMain_temp);
end;
end;
end;
end;
CardFirstNo:=Copy(string(edt_CardFirstNo.Text),1,2)+copy(edt_CardFirstNo.Text,3,2);
CardEndNo:=Copy(string(edt_AttachCardEndNo.Text),1,1)+copy(edt_AttachCardEndNo.Text,2,1);
MainCardNum:=string(CardFirstNo)+string(CardMainNo);
M_WriteCardNum:=Copy(MainCardNum,1,2)+'YN'+copy(MainCardNum,5,10)+' '+
Copy(MainCardNum,1,2)+'YN'+copy(MainCardNum,5,10);
A_WriteCardNum:=string(M_WriteCardNum)+string(CardEndNo);
inbuff:=string(edt_CardPWD.Text); //核对密码
st := IC_CheckPass_4428hex(icdev,pchar(inbuff));
If st <> 0 Then begin
lst_ReadWriteInfo.Items.Add('密码校验失败!');
Exit;
End;
lst_ReadWriteInfo.Items.Add('密码校验成功!');
if rb_IsWriteMainCard.Checked then
begin
RW_MainCardNum:='3'+copy(MainCardNum,1,1)+'3'+copy(MainCardNum,2,1)+'59'+'4e'+'3'
+copy(MainCardNum,5,1)+'3'+copy(MainCardNum,6,1)+'3'
+copy(MainCardNum,7,1)+'3'+copy(MainCardNum,8,1)+'3'+copy(MainCardNum,9,1)+'3'
+copy(MainCardNum,10,1);
RW2_MainCardNum:=string(RW_MainCardNum)+'20'+'20'+string(RW_MainCardNum);
inbuff:=RW2_MainCardNum;
st := IC_Write_hex(icdev, StrToInt(edt_WritePosition_Byte.Text),22,pchar(inbuff)); //写主卡数据
st := IC_Status(icdev);
If st <> 0 Then begin
Windows.Beep(300,600);
ShowMessage('写卡失败,请确认是否正确插入卡,或重新插卡!');
lst_ReadWriteInfo.Items.Add('>>>>>>>>>>>>>>>>>>>>写入失败的主卡号为:'+string(M_WriteCardNum));
Exit;
End;
lst_ReadWriteInfo.Items.Add('成功写入主卡号:'+string(M_WriteCardNum));
ClickNum:=ClickNum+1;
edt_WriteCardNum.Text:=string(M_WriteCardNum);
end
else
begin
if rb_IsWriteAttachCard.Checked then
begin
RW_MainCardNum:='3'+copy(MainCardNum,1,1)+'3'+copy(MainCardNum,2,1)+'59'+'4e'+'3'
+copy(MainCardNum,5,1)+'3'+copy(MainCardNum,6,1)+'3'
+copy(MainCardNum,7,1)+'3'+copy(MainCardNum,8,1)+'3'+copy(MainCardNum,9,1)+'3'
+copy(MainCardNum,10,1);
RW2_MainCardNum:=string(RW_MainCardNum)+'20'+'20'+string(RW_MainCardNum);
RW2_AttachCardNum:=RW2_MainCardNum+'3'+copy(CardEndNo,1,1)+'3'+copy(CardEndNo,2,1);;
inbuff:=RW2_AttachCardNum;
st := IC_Write_hex(icdev, StrToInt(edt_WritePosition_Byte.Text),24,pchar(inbuff)); // 写副卡数据
If st <> 0 Then
begin
Windows.Beep(300,600);
ShowMessage('写卡失败,请确认是否正确插入卡,或重新插卡!');
lst_ReadWriteInfo.Items.Add('>>>>>>>>>>>>>>>>>写入失败的副卡号为:'+string(A_WriteCardNum));
Exit;
end;
lst_ReadWriteInfo.Items.Add('成功写入副卡号:'+string(A_WriteCardNum));
ClickNum:=ClickNum+1;
edt_WriteCardNum.Text:=string(A_WriteCardNum);
End;
end;
end;
// 读卡号
procedure TPCH_Write_IC_Card4428.btn_ReadCardClick(Sender: TObject);
var READ_MainCardNum:string[28];
READ_AttachCardNum:string[32];
begin
if rb_IsWriteMainCard.Checked then
begin
getmem(outbuff,60);
st := IC_Read_hex(icdev, StrToInt(edt_WritePosition_Byte.Text),22,outbuff); //读主卡卡号
READ_MainCardNum:=copy(outbuff,2,1)+copy(outbuff,4,1)+copy(outbuff,5,2)+copy(outbuff,7,2)
+copy(outbuff,10,1)+copy(outbuff,12,1)+copy(outbuff,14,1)+copy(outbuff,16,1)
+copy(outbuff,18,1)+copy(outbuff,20,1)+' '+copy(outbuff,26,1)+copy(outbuff,26,1)
+copy(outbuff,29,2)+copy(outbuff,31,2)+copy(outbuff,34,1)+copy(outbuff,36,1)
+copy(outbuff,38,1)+copy(outbuff,40,1)+copy(outbuff,42,1)+copy(outbuff,44,1);
If st <> 0 Then
begin
Windows.Beep(300,600);
ShowMessage('读主卡卡号失败,请确认是否正确插入卡,或重新插卡!');
lst_ReadWriteInfo.Items.Add('读主卡卡号失败!');
freemem(outbuff);
Exit;
end
else
begin
lst_ReadWriteInfo.Items.Add('读主卡成功!');
outbuff[44]:=chr(0);
lst_ReadWriteInfo.Items.Add('>>>>>>>>>>>>数据为:'+READ_MainCardNum);
end;
end;
if rb_IsWriteAttachCard.Checked then
begin
getmem(outbuff,60);
st := IC_Read_hex(icdev, StrToInt(edt_WritePosition_Byte.Text),24,outbuff); //读副卡卡号
READ_AttachCardNum:=copy(outbuff,2,1)+copy(outbuff,4,1)+copy(outbuff,5,2)+copy(outbuff,7,2)
+copy(outbuff,10,1)+copy(outbuff,12,1)+copy(outbuff,14,1)+copy(outbuff,16,1)
+copy(outbuff,18,1)+copy(outbuff,20,1)+' '+copy(outbuff,26,1)+copy(outbuff,26,1)
+copy(outbuff,29,2)+copy(outbuff,31,2)+copy(outbuff,34,1)+copy(outbuff,36,1)
+copy(outbuff,38,1)+copy(outbuff,40,1)+copy(outbuff,42,1)+copy(outbuff,44,1)
+copy(outbuff,46,1)+copy(outbuff,48,1);
If st <> 0 Then
begin
Windows.Beep(300,600);
ShowMessage('读副卡卡号失败,请确认是否正确插入卡,或重新插卡!');
lst_ReadWriteInfo.Items.Add('读副卡卡号失败!');
freemem(outbuff);
Exit;
end
else
begin
lst_ReadWriteInfo.Items.Add('读副卡成功!');
outbuff[48]:=chr(0);
lst_ReadWriteInfo.Items.Add('>>>>>>>>>>>>数据为:'+READ_AttachCardNum);
end;
end;
end;
//修改密码
procedure TPCH_Write_IC_Card4428.btn_ChangeCardPWDClick(Sender: TObject);
begin
inbuff:=string(edt_CardPWD.Text);
st := IC_ChangePass_4428hex(icdev,pchar(inbuff)); //修改密码
If st <> 0 Then begin
lst_ReadWriteInfo.Items.Add('修改密码失败!');
Exit;
End;
lst_ReadWriteInfo.Items.Add('修改密码成功!');
lst_ReadWriteInfo.Items.Add('卡密码改为'+string(edt_CardPWD.Text));
lst_ReadWriteInfo.Items.Add('读写设备测试通过!');
end;
// 清除记录
procedure TPCH_Write_IC_Card4428.btn_ClearListBoxRecClick(Sender: TObject);
begin
lst_ReadWriteInfo.Items.Clear;
end;
// 仅关闭串口
procedure TPCH_Write_IC_Card4428.btn_ClosePortClick(Sender: TObject);
begin
if icdev>0 then
begin
st := IC_ExitComm(icdev); //关闭串口
icdev:=0;
PCH_Write_IC_Card4428.btn_VerifyCardPwd.Enabled:=False;
PCH_Write_IC_Card4428.btn_WriteCard.Enabled:=False;
PCH_Write_IC_Card4428.btn_ReadCard.Enabled:=False;
PCH_Write_IC_Card4428.btn_ChangeCardPWD.Enabled:=False;
PCH_Write_IC_Card4428.btn_ClosePort.Enabled:=False;
lst_ReadWriteInfo.Items.Add('关闭串口成功!');
end;
end;
//退出,关闭串口
procedure TPCH_Write_IC_Card4428.btn_ExitClick(Sender: TObject);
begin
close;
if icdev>0 then
begin
st := IC_ExitComm(icdev); //关闭串口
icdev:=0;
end;
freemem(outbuff);
end;
procedure TPCH_Write_IC_Card4428.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
if icdev>0 then
begin
st := IC_ExitComm(icdev); //关闭串口
icdev:=0;
end;
freemem(outbuff);
Action:=caFree;
end;
procedure TPCH_Write_IC_Card4428.edt_CardMainNoChange(Sender: TObject);
begin
ClickNum:=0;
end;
procedure TPCH_Write_IC_Card4428.edt_AttachCardEndNoChange(
Sender: TObject);
begin
ClickNum:=0;
end;
end.