?? public_u.pas
字號:
unit public_u;
interface
uses
Windows,Dialogs, SysUtils;
var
cardtype_str_v:string;
com_num,cardtype_num_v:integer;
function openport():integer;
function cardtype_num(cardtype_str:string):integer;
function cardtype_str(cardtype_num:integer):string;
procedure kh_length_filter_xk(kh_length:integer;var buf_hex:array of char);
function kh_length_filter_dk(var kh_length:integer):integer;
implementation
uses surehope_api;
function openport():integer;
var
Buf1: array[0..300] of Char; //300個HEX數據緩沖區
D,C,e:integer;
Hp, Sp: Pchar;
begin
if init_com(com_num)=SURE_HOPE_COMERROR then
begin
MessageBox(0,'打開端口失敗!','打開端口',mb_iconerror+mb_ok);
result:=1;
exit;
end;
Sele_Card(cardtype_num_v); //選擇卡型號
C := Power_on; //卡上電操作
if C <>SURE_HOPE_OK then //返回值: 0:正確;2:無卡;4:串口錯誤;
begin
MessageBox(0, '讀卡器中無卡片', 'IC卡上電操作', mb_iconerror+mb_ok);
Close_com; //關閉串口
result:=1;
exit;
end;
Buf1:='FFFFFFFFFFFFFFFFFFFF';
Hp := @Buf1;
E := Rd_Asc(0, 0, 2, Hp); //讀取2個字節HEX數據(Siemens 4442卡型標志'A213'),返回4個字符
if E<>0 then
begin
MessageBox(0, '讀卡錯誤', '讀卡', mb_iconerror+mb_ok);
Close_com; //關閉串口
result:=1;
exit;
end;
if cardtype_num_v=42 then
begin
//讀取2個字節HEX數據(Siemens 4442卡型標志'A213'),返回4個字符
if (Buf1[0] <> 'A') or (Buf1[1] <> '2') or (Buf1[2] <> '1') or (Buf1[3] <> '3') then
begin
MessageBox(0, '不是Siemens 4442卡型', '讀卡型', mb_iconwarning+mb_ok);
Close_com; //關閉串口
result:=1;
exit;
end;
end;
if cardtype_num_v=43 then
begin
//讀取2個字節HEX數據(Siemens 4428卡型標志'9223'),返回4個字符
if (Buf1[0] <> '9') or (Buf1[1] <> '2') or (Buf1[2] <> '2') or (Buf1[3] <> '3') then
begin
MessageBox(0, '不是Siemens 4428卡型', '讀卡型', mb_iconwarning+mb_ok);
Close_com; //關閉串口
result:=1;
exit;
end;
end;
case cardtype_num_v of
42:begin
Sp := 'FFFFFF'; //Siemens 4442空白卡缺省密碼
D := Chk_SC(0, 3, Sp); //核對密碼
end;
43:begin
Sp := 'FFFF'; //Siemens 4428空白卡缺省密碼
D := Chk_SC(0, 2, Sp); //核對密碼
end;
end;
if D <> 0 then
begin
MessageBox(0, '核對IC卡密碼錯誤', '核對IC卡密碼', mb_iconerror+mb_ok);
Close_com; //關閉串口
result:=1;
exit;
end;
end;
//處理卡片里卡號長度的值,如果不滿10則取第2位數,否則兩位數都取.
procedure kh_length_filter_xk(kh_length:integer;var buf_hex:array of char);
var
kh_length_str:string;
begin
if kh_length<=9 then
begin
kh_length_str:='0'+inttostr(kh_length);
strpcopy(buf_hex,kh_length_str); //把卡號長度寫入IC卡1區13-13位置字符串數組緩沖區
end
else
begin
strpcopy(buf_hex,inttostr(kh_length)); //把卡號長度寫入IC卡1區13-13位置字符串數組緩沖區
end;
end;
//處理卡片里卡號長度的值,如果不滿10則取第2位數,否則兩位數都取.
function kh_length_filter_dk(var kh_length:integer):integer;
var
buf_hex_dk:array[0..300] of char; //300個HEX數據緩沖區
kh_length_zi:integer;
begin
buf_hex_dk:='FF';
if rd_asc(1,13,1,buf_hex_dk)<>sure_hope_ok then //讀取IC卡上的卡號長度
begin
MessageBox(0,'讀卡失敗!','讀取卡號長度',mb_iconerror+mb_ok);
close_com();//關閉串口
kh_length_filter_dk:=1;
exit;
end;
try //判斷HEX字符是否為字母,是字母就處理異常
kh_length_zi:=strtoint(buf_hex_dk);
except on e:exception do
begin
MessageBox(0,'卡沒有初始化!','讀取卡號長度',mb_iconerror+mb_ok);
close_com();//關閉串口
kh_length_filter_dk:=1;
exit;
end;
end;
if kh_length_zi<=9 then //判斷卡號的長度數,如果不滿10則取第2位數,否則兩位數都取.
kh_length:=strtoint(buf_hex_dk[1])
else
begin
if kh_length_zi<=13 then
kh_length:=strtoint(buf_hex_dk)
else
begin
MessageBox(0,'卡沒有初始化!','讀取卡號長度',mb_iconerror+mb_ok);
close_com();//關閉串口
kh_length_filter_dk:=1;
exit;
end;
end;
end;
//選擇IC卡型的字符
function cardtype_str(cardtype_num:integer):string;
begin
case cardtype_num of
42:cardtype_str:='SIEMENS 4442';
43:cardtype_str:='SIEMENS 4428';
end;
end;
//選擇IC卡型的代號
function cardtype_num(cardtype_str:string):integer;
begin
if cardtype_str='Inside 24C01A' then
begin
cardtype_num:=0;
exit;
end;
if cardtype_str='Inside 24C02' then
begin
cardtype_num:=1;
exit;
end;
if cardtype_str='Inside 24C04' then
begin
cardtype_num:=2;
exit;
end;
if cardtype_str='Inside 24C08' then
begin
cardtype_num:=3;
exit;
end;
if cardtype_str='Inside 24C16' then
begin
cardtype_num:=4;
exit;
end;
if cardtype_str='Inside 24C32' then
begin
cardtype_num:=5;
exit;
end;
if cardtype_str='Inside 24C64' then
begin
cardtype_num:=7;
exit;
end;
if cardtype_str='Inside 24C65' then
begin
cardtype_num:=6;
exit;
end;
if cardtype_str='ATMEL 88SC101' then
begin
cardtype_num:=10;
exit;
end;
if cardtype_str='ATMEL 88SC102' then
begin
cardtype_num:=11;
exit;
end;
if cardtype_str='ATMEL 88SC103' then cardtype_num:=12;
if cardtype_str='ATMEL 88SC1601' then cardtype_num:=13;
if cardtype_str='ATMEL 88SC1604' then cardtype_num:=14;
if cardtype_str='ATMEL 88SC1604A' then cardtype_num:=15;
if cardtype_str='ATMEL 24C01A' then cardtype_num:=20;
if cardtype_str='ATMEL 24C02' then cardtype_num:=21;
if cardtype_str='ATMEL 24C04' then cardtype_num:=22;
if cardtype_str='ATMEL 24C08' then cardtype_num:=23;
if cardtype_str='ATMEL 24C16' then cardtype_num:=24;
if cardtype_str='ATMEL 24C32' then cardtype_num:=25;
if cardtype_str='ATMEL 24C64' then cardtype_num:=27;
if cardtype_str='ATMEL 45D041' then cardtype_num:=64;
if cardtype_str='MICROCHIP 24LC01B' then cardtype_num:=20;
if cardtype_str='MICROCHIP 24LC08B' then cardtype_num:=23;
if cardtype_str='MICROCHIP 24LC16B' then cardtype_num:=24;
if cardtype_str='MICROCHIP 24C65' then cardtype_num:=26;
if cardtype_str='ATMEL 93C46' then cardtype_num:=30;
if cardtype_str='SIEMENS 4404' then cardtype_num:=40;
if cardtype_str='SIEMENS 4406' then cardtype_num:=41;
if cardtype_str='SIEMENS 4442' then cardtype_num:=42;
if cardtype_str='SIEMENS 4428' then cardtype_num:=43;
if cardtype_str='SIEMENS 4432' then cardtype_num:=50;
if cardtype_str='SIEMENS 4418' then cardtype_num:=51;
end;
end.
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -