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

📄 unit_pubfunc.pas

📁 ICCard读写程序,用来在windows环境下读写IC卡内数据!
💻 PAS
📖 第 1 页 / 共 4 页
字号:
  ReturnValue:= UpdatePubAppFile;
  if( ReturnValue<>0 ) then
  begin
    Result:= ReturnValue;
    Exit;
  end;

//Create Employee information File
  ReturnValue:= CreateEmpInfoFile;
  if( ReturnValue<>0 ) then
  begin
    Result:= ReturnValue;
    Exit;
  end;

//Update Employee information File
  ReturnValue:= UpdateEmpInfoFile;
  if( ReturnValue<>0 ) then
  begin
    Result:= ReturnValue;
    Exit;
  end;

//Create Detail File
  ReturnValue:= CreateDetailFile;
  if( ReturnValue<>0 ) then
  begin
    Result:= ReturnValue;
    Exit;
  end;

  
//Create EP
  ReturnValue:= CreateEPFile;
  if( ReturnValue<>0 ) then
  begin
    Result:= ReturnValue;
    Exit;
  end;

//Create ED
  ReturnValue:= CreateEDFile;
  if( ReturnValue<>0 ) then
  begin
    Result:= ReturnValue;
    Exit;
  end;

//Create DF End
  ReturnValue:= CreateDFEnd;
  if( ReturnValue<>0 ) then
  begin
    Result:= ReturnValue;
    Exit;
  end;

//Create MF End
  ReturnValue:= CreateMFEnd;
  if( ReturnValue<>0 ) then
  begin
    Result:= ReturnValue;
    Exit;
  end;
  
end;

function CreateMF:SmallInt;
var
  send_buf:      array[0..100] of Byte;
  recv_buf:      array[0..100] of Byte;
  ReturnValue:   SmallInt;
  i:             integer;
begin
  FillChar( send_buf, sizeof(send_buf), 0 );
  FillChar( recv_buf, sizeof(send_buf), 0 );


  send_buf[0]:= $00 ;
  send_buf[1]:= $00 ;
  send_buf[2]:= $1d ;
  send_buf[3]:= $80 ;
  send_buf[4]:= $e0 ;
  send_buf[5]:= $00 ;
  send_buf[6]:= $00 ;
  send_buf[7]:= $18 ;
  send_buf[8]:= $ff ;
  send_buf[9]:= $ff ;
  send_buf[10]:= $ff ;
  send_buf[11]:= $ff ;
  send_buf[12]:= $ff ;
  send_buf[13]:= $ff ;
  send_buf[14]:= $ff ;
  send_buf[15]:= $ff ;
  send_buf[16]:= $0f ;
  send_buf[17]:= $01 ;
  send_buf[18]:= $31 ;
  send_buf[19]:= $50 ;
  send_buf[20]:= $41 ;
  send_buf[21]:= $59 ;
  send_buf[22]:= $2e ;
  send_buf[23]:= $53 ;
  send_buf[24]:= $59 ;
  send_buf[25]:= $53 ;
  send_buf[26]:= $2e ;
  send_buf[27]:= $44 ;
  send_buf[28]:= $44 ;
  send_buf[29]:= $46 ;
  send_buf[30]:= $30 ;
  send_buf[31]:= $31 ;
  send_buf[32]:= $00 ;

  for i:=0 to send_buf[2]+2 do
    send_buf[send_buf[2]+3]:= send_buf[i] XOR send_buf[send_buf[2]+3];

  ReturnValue:= cpu_protocol( icdev, send_buf[2]+4, send_buf[0], recv_buf[0] );
  if( ReturnValue<>0 ) then
  begin
    Result:= ReturnValue;
    Exit;
  end;

  if (recv_buf[recv_buf[2]+1]<>$90)OR(recv_buf[recv_buf[2]+2]<>$0) then
  begin
    ReturnCode.SW1:= recv_buf[recv_buf[2]+1];
    ReturnCode.SW2:= recv_buf[recv_buf[2]+2];
    ShowSW1SW2( ReturnCode, '建立主控目录失败' );
    Result:= -1;
  end;

  Result:=0;

end;


function CreateATRFile:SmallInt;
var
  send_buf:      array[0..100] of Byte;
  recv_buf:      array[0..100] of Byte;
  ReturnValue:   SmallInt;
  i:             integer;
begin
  FillChar( send_buf, sizeof(send_buf), 0 );
  FillChar( recv_buf, sizeof(send_buf), 0 );

  send_buf[0]:= $00  ;
  send_buf[1]:= $00 ;
  send_buf[2]:= $0c ;
  send_buf[3]:= $80 ;
  send_buf[4]:= $e0 ;
  send_buf[5]:= $02 ;
  send_buf[6]:= $0  ;
  send_buf[7]:= $07 ;
  send_buf[8]:= $00 ;
  send_buf[9]:= $01 ;
  send_buf[10]:= $04 ;
  send_buf[11]:= $0f ;
  send_buf[12]:= $0f ;
  send_buf[13]:= $00 ;
  send_buf[14]:= $0b ;
  send_buf[15]:= $00 ;

  for i:=0 to send_buf[2]+2 do
    send_buf[send_buf[2]+3]:= send_buf[i] XOR send_buf[send_buf[2]+3];

  ReturnValue:= cpu_protocol( icdev, send_buf[2]+4, send_buf[0], recv_buf[0] );
  if( ReturnValue<>0 ) then
  begin
    Result:= ReturnValue;
    Exit;
  end;

  if (recv_buf[recv_buf[2]+1]<>$90)OR(recv_buf[recv_buf[2]+2]<>$0) then
  begin
    ReturnCode.SW1:= recv_buf[recv_buf[2]+1];
    ReturnCode.SW2:= recv_buf[recv_buf[2]+2];
    ShowSW1SW2( ReturnCode, '建立复位应答文件失败' );
    Result:= -1;
  end;

  Result:=0;

end;

function UpdateATRFile:SmallInt;
var
  send_buf:      array[0..100] of Byte;
  recv_buf:      array[0..100] of Byte;
  ReturnValue:   SmallInt;
  i:             integer;
begin
  FillChar( send_buf, sizeof(send_buf), 0 );
  FillChar( recv_buf, sizeof(send_buf), 0 );

  send_buf[0]:= $00 ;
  send_buf[1]:= $00 ;
  send_buf[2]:= $11 ;
  send_buf[3]:= $00 ;
  send_buf[4]:= $d6 ;
  send_buf[5]:= $00 ;
  send_buf[6]:= $00 ;
  send_buf[7]:= $0b ;
  send_buf[8]:= $30 ;
  send_buf[9]:= $30 ;
  send_buf[10]:= $30 ;
  send_buf[11]:= $30 ;
  send_buf[12]:= $30 ;
  send_buf[13]:= $30 ;
  send_buf[14]:= $30 ;
  send_buf[15]:= $30 ;
  send_buf[16]:= $30 ;
  send_buf[17]:= $30 ;
  send_buf[18]:= $30 ;
  send_buf[19]:= $30 ;
  send_buf[20]:= $00 ;

  for i:=0 to send_buf[2]+2 do
    send_buf[send_buf[2]+3]:= send_buf[i] XOR send_buf[send_buf[2]+3];

  ReturnValue:= cpu_protocol( icdev, send_buf[2]+4, send_buf[0], recv_buf[0] );
  if( ReturnValue<>0 ) then
  begin
    Result:= ReturnValue;
    Exit;
  end;

  if (recv_buf[recv_buf[2]+1]<>$90)OR(recv_buf[recv_buf[2]+2]<>$0) then
  begin
    ReturnCode.SW1:= recv_buf[recv_buf[2]+1];
    ReturnCode.SW2:= recv_buf[recv_buf[2]+2];
    ShowSW1SW2( ReturnCode, '写复位应答文件失败' );
    Result:= -1;
  end;

  Result:=0;

end;

function CreateDF:SmallInt;
var
  send_buf:      array[0..100] of Byte;
  recv_buf:      array[0..100] of Byte;
  ReturnValue:   SmallInt;
  i:             integer;
begin
  FillChar( send_buf, sizeof(send_buf), 0 );
  FillChar( recv_buf, sizeof(send_buf), 0 );


  send_buf[0]:= $00 ;
  send_buf[1]:= $40 ;
  send_buf[2]:= $0e ;
  send_buf[3]:= $80 ;
  send_buf[4]:= $e0 ;
  send_buf[5]:= $01 ;
  send_buf[6]:= $00 ;
  send_buf[7]:= $09 ;
  send_buf[8]:= $2f ;
  send_buf[9]:= $01 ;
  send_buf[10]:= $0f ;
  send_buf[11]:= $00 ;
  send_buf[12]:= $41 ;
  send_buf[13]:= $53 ;
  send_buf[14]:= $46 ;
  send_buf[15]:= $30 ;
  send_buf[16]:= $31 ;
  send_buf[17]:= $00 ;

  for i:=0 to send_buf[2]+2 do
    send_buf[send_buf[2]+3]:= send_buf[i] XOR send_buf[send_buf[2]+3];

  ReturnValue:= cpu_protocol( icdev, send_buf[2]+4, send_buf[0], recv_buf[0] );
  if( ReturnValue<>0 ) then
  begin
    Result:= ReturnValue;
    Exit;
  end;

  if (recv_buf[recv_buf[2]+1]<>$90)OR(recv_buf[recv_buf[2]+2]<>$0) then
  begin
    ReturnCode.SW1:= recv_buf[recv_buf[2]+1];
    ReturnCode.SW2:= recv_buf[recv_buf[2]+2];
    ShowSW1SW2( ReturnCode, '建立应用文件失败' );
    Result:= -1;
  end;

  Result:=0;

end;

function CreateKeyFile:SmallInt;
var
  send_buf:      array[0..100] of Byte;
  recv_buf:      array[0..100] of Byte;
  ReturnValue:   SmallInt;
  i:             integer;
begin
  FillChar( send_buf, sizeof(send_buf), 0 );
  FillChar( recv_buf, sizeof(send_buf), 0 );

  send_buf[0]:= $00 ;
  send_buf[1]:= $00 ;
  send_buf[2]:= $0c ;
  send_buf[3]:= $80 ;
  send_buf[4]:= $e0 ;
  send_buf[5]:= $02 ;
  send_buf[6]:= $00  ;
  send_buf[7]:= $07 ;
  send_buf[8]:= $6f ;
  send_buf[9]:= $02 ;
  send_buf[10]:= $05 ;
  send_buf[11]:= $0f ;
  send_buf[12]:= $00 ;
  send_buf[13]:= $0a ;
  send_buf[14]:= $00 ;
  send_buf[15]:= $00 ;

  for i:=0 to send_buf[2]+2 do
    send_buf[send_buf[2]+3]:= send_buf[i] XOR send_buf[send_buf[2]+3];

  ReturnValue:= cpu_protocol( icdev, send_buf[2]+4, send_buf[0], recv_buf[0] );
  if( ReturnValue<>0 ) then
  begin
    Result:= ReturnValue;
    Exit;
  end;

  if (recv_buf[recv_buf[2]+1]<>$90)OR(recv_buf[recv_buf[2]+2]<>$0) then
  begin
    ReturnCode.SW1:= recv_buf[recv_buf[2]+1];
    ReturnCode.SW2:= recv_buf[recv_buf[2]+2];
    ShowSW1SW2( ReturnCode, '建立DF下的密钥文件失败' );
    Result:= -1;
  end;

  Result:=0;

end;

function  AddPinKey:            SmallInt;
var
  send_buf:      array[0..100] of Byte;
  recv_buf:      array[0..100] of Byte;
  ReturnValue:   SmallInt;
  i:             integer;
begin
  FillChar( send_buf, sizeof(send_buf), 0 );
  FillChar( recv_buf, sizeof(send_buf), 0 );

  send_buf[0]:= $00 ;
  send_buf[1]:= $00 ;
  send_buf[2]:= $13 ;
  send_buf[3]:= $80 ;
  send_buf[4]:= $d4 ;
  send_buf[5]:= $00 ;
  send_buf[6]:= $00 ;
  send_buf[7]:= $0e ;
  send_buf[8]:= $01 ;
  send_buf[9]:= $01 ;
  send_buf[10]:= $00 ;
  send_buf[11]:= $0b ;
  send_buf[12]:= $0f ;
  send_buf[13]:= $01 ;
  send_buf[14]:= $1f ;
  send_buf[15]:= $33 ;
  send_buf[16]:= $31 ;
  send_buf[17]:= $32 ;
  send_buf[18]:= $33 ;
  send_buf[19]:= $34 ;
  send_buf[20]:= $35 ;
  send_buf[21]:= $36 ;
  send_buf[22]:= $00 ;


  for i:=0 to send_buf[2]+2 do
    send_buf[send_buf[2]+3]:= send_buf[i] XOR send_buf[send_buf[2]+3];

  ReturnValue:= cpu_protocol( icdev, send_buf[2]+4, send_buf[0], recv_buf[0] );
  if( ReturnValue<>0 ) then
  begin
    Result:= ReturnValue;
    Exit;
  end;

  if (recv_buf[recv_buf[2]+1]<>$90)OR(recv_buf[recv_buf[2]+2]<>$0) then
  begin
    ReturnCode.SW1:= recv_buf[recv_buf[2]+1];
    ReturnCode.SW2:= recv_buf[recv_buf[2]+2];
    ShowSW1SW2( ReturnCode, '增加PIN密钥失败' );
    Result:= -1;
  end;

  Result:=0;

end;


function  AddExternalAuthKey:   SmallInt;
var
  send_buf:      array[0..100] of Byte;
  recv_buf:      array[0..100] of Byte;
  ReturnValue:   SmallInt;
  i:             integer;
begin
  FillChar( send_buf, sizeof(send_buf), 0 );
  FillChar( recv_buf, sizeof(send_buf), 0 );

  send_buf[0]:= $00 ;
  send_buf[1]:= $00 ;
  send_buf[2]:= $1d ;
  send_buf[3]:= $80 ;
  send_buf[4]:= $d4 ;
  send_buf[5]:= $00 ;
  send_buf[6]:= $00 ;
  send_buf[7]:= $18 ;
  send_buf[8]:= $01 ;
  send_buf[9]:= $01 ;
  send_buf[10]:= $00 ;
  send_buf[11]:= $08 ;
  send_buf[12]:= $0f ;
  send_buf[13]:= $02 ;
  send_buf[14]:= $2f ;
  send_buf[15]:= $33 ;
  send_buf[16]:= $31 ;
  send_buf[17]:= $32 ;
  send_buf[18]:= $33 ;
  send_buf[19]:= $34 ;
  send_buf[20]:= $35 ;
  send_buf[21]:= $36 ;
  send_buf[22]:= $37 ;
  send_buf[23]:= $38 ;
  send_buf[24]:= $31 ;
  send_buf[25]:= $32 ;
  send_buf[26]:= $33 ;
  send_buf[27]:= $34 ;
  send_buf[28]:= $35 ;
  send_buf[29]:= $36 ;
  send_buf[30]:= $37 ;
  send_buf[31]:= $38 ;
  send_buf[32]:= $00 ;

  for i:=0 to send_buf[2]+2 do
    send_buf[send_buf[2]+3]:= send_buf[i] XOR send_buf[send_buf[2]+3];

  ReturnValue:= cpu_protocol( icdev, send_buf[2]+4, send_buf[0], recv_buf[0] );
  if( ReturnValue<>0 ) then
  begin
    Result:= ReturnValue;
    Exit;
  end;

  if (recv_buf[recv_buf[2]+1]<>$90)OR(recv_buf[recv_buf[2]+2]<>$0) then
  begin
    ReturnCode.SW1:= recv_buf[recv_buf[2]+1];
    ReturnCode.SW2:= recv_buf[recv_buf[2]+2];
    ShowSW1SW2( ReturnCode, '增加外部验证密钥失败' );
    Result:= -1;
  end;

  Result:=0;

end;

function  AddCashWithdrawKey: SmallInt;
var
  send_buf:      array[0..100] of Byte;
  recv_buf:      array[0..100] of Byte;
  ReturnValue:   SmallInt;
  i:             integer;
begin
  FillChar( send_buf, sizeof(send_buf), 0 );
  FillChar( recv_buf, sizeof(send_buf), 0 );

  send_buf[0]:= $00 ;
  send_buf[1]:= $00 ;
  send_buf[2]:= $1d ;
  send_buf[3]:= $80 ;
  send_buf[4]:= $d4 ;
  send_buf[5]:= $00 ;
  send_buf[6]:= $00 ;
  send_buf[7]:= $18 ;
  send_buf[8]:= $02 ;
  send_buf[9]:= $01 ;
  send_buf[10]:= $00 ;
  send_buf[11]:= $00 ;
  send_buf[12]:= $0f ;
  send_buf[13]:= $00 ;
  send_buf[14]:= $f0 ;
  send_buf[15]:= $33 ;
  send_buf[16]:= $31 ;
  send_buf[17]:= $32 ;
  send_buf[18]:= $33 ;
  send_buf[19]:= $34 ;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -