⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 public_u.pas

📁 delphi7.0+SQl server 2000开发的,对于初学者有较好的参考价值
💻 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 + -