您的当前位置:首页正文

LKE外设API调用说明Ver3.3

2021-07-03 来源:步旅网
 LKE外设API调用说明 Ver3.3

LKE外设 API调用说明

Ver3.3

(动态库名:LKE_Drive.dll)

Version 3.3, Sept., 2012 Document LKE20120901

Copyright 2011-2012 LKE Co,. Limited All Rights Reserved

修订记录

编号

描述 版本

初稿(定义参数设置及磁

1 2011-07-07 1.0

条、密码键盘接口)

日期

作者 陈伟

审核

发布日期

2 2011-11-23 增加IC卡接口 2.0 陈伟 3 2012-03-23 增加三磁道读写接口 3.0 陈伟 4 2012-04-24 增加高低抗磁选择接口 3.1 增加IC卡密钥接口及5 2012-08-22 3.2

Memory接口

陈伟 陈伟

6 2012-09-10 增加Mifare One接口 3.3 陈伟

一、参数设置函数

1、打开串口

int LKE_OpenCOM(int COM) 打开串口(带参数) 入口参数:

COM:1-COM1 , 2-COM2 , ...可选1~16 出口参数:无

返回值 1 成功 0 失败 备注 通讯参数默认为9600BPS,8N,1STOP 函数声明 功能描述 参数含义

2、打开串口1(可选波特率)

int LKE_OpenCOMx(int COM,int Baud) 打开串口(带参数) 入口参数:

COM:1-COM1 , 2-COM2 , ...可选1~16

Baud:串口波特率选择,对于苏州银行样机,固定为38400 出口参数:无

返回值 1 成功 0 失败

备注 函数声明

功能描述 参数含义

3、关闭串口

函数声明 int LKE_CloseCOM() 功能描述 关闭串口 参数含义 无 返回值 1 成功 0 失败

备注

二、选择扩展盒端口函数

int LKE_SelectExtPortEx(char ExtPort) 选择扩展盒时的端口 入口参数:

ExtPort: 扩展盒端口:A - A口, B - B口, C - C口, D - D口, K - K口 出口参数:无

返回值 1 成功 0 失败

备注

函数声明 功能描述 参数含义

Copyright 2011-2012 LKE Co,. Limited

1

三、磁条读写器函数

1、复位

函数声明 int LKE_MR_Reset() 功能描述 复位磁条读写器 参数含义 无 返回值 1 成功 0 失败

备注

2、读磁条(适用于双磁道读写器)

int LKE_MR_Read( int Type, char *SecTrack, char *TriTrack, int TimeOut) 读磁条信息 入口参数:

Type: 选择磁道数 0 -- 读2&3道 ;1 – 只读2道;2 -- 只读3道 TimeOut:超时时间(秒) 出口参数:

SecTrack:第二磁道数据缓冲区; TriTrack: 第三磁道数据缓冲区;

返回值 1 成功 0 失败 备注 缓冲区不可小于108,否则有不可预料错误 函数声明 功能描述 参数含义

3、写磁条(适用于双磁道读写器)

int LKE_MR_Write(int Type, char *SecTrack, char *TriTrack, int TimeOut) 写磁条信息 入口参数:

Type: 选择磁道数 0 – 写2&3道 ;1 – 只写2道;2 – 只写3道 SecTrack:第二磁道数据缓冲区; TriTrack: 第三磁道数据缓冲区; TimeOut: 超时时间(秒); 出口参数:无

返回值 1 成功 0 失败 备注 磁道数据长度应不大于104 函数声明 功能描述 参数含义

Copyright 2011-2012 LKE Co,. Limited

2

4、读磁条(适用于三磁道读写器)

int LKE_MSRE_Read( int Type,char *FirTrack,char *SecTrack, char *TriTrack, int TimeOut)

功能描述 读磁条信息 参数含义 入口参数:

Type:选择磁道数

0 --读2&3道;1-- 读2道;2-- 读3道;3-- 读1道;4 --读1&2道; 5 --读1&2&3道

TimeOut:超时时间(秒) 出口参数:

FirTrack: 第二磁道数据缓冲区; SecTrack:第二磁道数据缓冲区; TriTrack: 第三磁道数据缓冲区;

返回值 1 成功 0 失败 备注 缓冲区不可小于108,否则有不可预料错误 函数声明

5、写磁条(适用于三磁道读写器)

int LKE_MSRE_Write( char *FirTrack,char *SecTrack, char *TriTrack,

int TimeOut)

功能描述 写磁条信息 参数含义 入口参数:

FirTrack: 第二磁道数据缓冲区; SecTrack:第二磁道数据缓冲区; TriTrack: 第三磁道数据缓冲区; TimeOut: 超时时间(秒); 出口参数:无

返回值 1 成功 0 失败 备注 若某磁道数据为空串,表示不写该磁道(磁道数据长度应不大于104)

函数声明

6、设置高/低抗磁

int LKE_MSRE_SetHiLowCo(int Mode) 设置写磁(Hi/Low co)模式 入口参数:

Mode:写磁模式 0—低抗磁;1—高抗磁 出口参数:无

返回值 1 成功 0 失败

备注

函数声明 功能描述 参数含义

Copyright 2011-2012 LKE Co,. Limited

3

四、加密密码键盘函数(3DES)

1、取消当前操作

函数声明 int LKE_DKB_Reset()

功能描述 使密码键盘处于待命状态,可用于取消之前未完成的任务。 参数含义 无 返回值 1 正确 0 错误

备注

2、设置加密模式

函数声明

功能描述 参数含义

int LKE_DKB_ SetMode (int Mode)

设置密码键盘处于加密或非加密工作模式; 入口参数:

Mode: 0为非加密模式,1为加密模式。 出口参数:无 1正确 0 错误

返回值 备注

3、下载主密钥

函数声明 功能描述 参数含义

int LKE_DKB_LoadMK(int Mode ,int Len,BYTE * Mkey) 明文下载主密钥 入口参数:

Mode: 0—明文下载,1—密文下载 Len : 主密钥长度(8或16)

Mkey: 主密钥(8字节或16字节) 出口参数:无 1正确 0 错误

返回值 备注

4、密文下载工作密钥

函数声明 功能描述 参数含义

int LKE_DKB_LoadWK(int Wkey, int Len, BYTE *data)

用主密钥对密文数据流data解密后,将其结果作为Wkey号工作密钥 入口参数:

Wkey: 工作密钥号0-255

Len : 工作密钥长度(8或16)

data: 工作密钥的密文数据(8字节或16字节) 出口参数:无 1正确 0 错误

返回值 备注

Copyright 2011-2012 LKE Co,. Limited

4

5、加密字符串

函数声明 功能描述 参数含义

Int LKE_DKB_EncrytStr(int Mode,int WKey,int Len,char* str,BYTE *outdata) 用指定的密钥加密字符串 入口参数:

Mode: 0 用主密钥加密,1 用工作密钥加密

WKey: 工作密钥号0-255 (Mode=0时,WKey值无意义) Len :字符串str的长度,固定为8 str :待加密的字符串 出口参数:

outdata:键盘返回的密文信息

返回值 > 0返回密文数据长度 0 错误

备注

6、非加密模式下读键盘

int LKE_DKB_Read_Clear(BYTE *data,int TimeOut) 请求用户输入PIN,返回PIN明文信息 入口参数:

TimeOut:超时时间(秒) 出口参数:

data:键盘返回的PIN明文信息

返回值 > 0返回明文的长度 0 错误 备注 适用于非加密模式 函数声明 功能描述 参数含义

7、加密模式下加密读键盘(按IBM3624格式)

int LKE_DKB_Read_IBM3624(int Wkey,BYTE *data,int TimeOut, BOOL Split= TRUE)

功能描述 请求用户输入PIN,返回PIN密文信息 参数含义 入口参数:

Wkey: 工作密钥号0-255 TimeOut:超时时间(秒)

Split:返回的PIN密文信息是否需要拆字 FALSE-不需要 TRUE-需要 出口参数:

data:键盘返回的PIN密文信息

返回值 > 0返回密文数据长度 0 错误 备注 Wkey应与LKE_DKB_LoadWK下载的工作密钥号相同 函数声明

8、加密模式下加密读键盘(按ANSI9.8格式)

函数声明 功能描述 参数含义

int LKE_DKB_Read_ANSI98(intWKey, char*CardNo, BYTE*data, int TimeOut, BOOL Split= TRUE)

请求用户输入PIN,返回PIN密文信息 入口参数:

WKey: 工作密钥号0-255 CardNo:卡号(12字节)

TimeOut:超时时间(秒)

Split:返回的PIN密文信息是否需要拆字 FALSE-不需要 TRUE-需要 出口参数:

Copyright 2011-2012 LKE Co,. Limited

5

data:键盘返回的PIN密文信息

返回值 > 0返回密文数据长度 0 错误 备注 Wkey应与LKE_DKB_LoadWK下载的工作密钥号相同

9、语音提示

函数声明 功能描述 参数含义

int LKE_DKB_ SOUND(int Mode) 键盘语音提示 入口参数:

Mode= 1“您好!”,Mode= 2 “谢谢” 出口参数:无 1正确 0 错误

返回值

10、读键盘系列号

int LKE_DKB_Read_SerialNo(BYTE *data,BOOL Split= TRUE) 读取密码键盘序列号 入口参数:

Split:返回的键盘序列号是否需要拆字 FALSE-不需要 TRUE-需要 出口参数:

data:返回的键盘系列号

返回值 >0返回键盘系列号长度 0 错误

备注 函数声明

功能描述 参数含义

11、读客户评价(仅适用于带客户评价功能的加密键盘)

int LKE_DKB_Read_Review(BYTE *data,int TimeOut) 请求客户输入评价码,返回明文客户评价信息 入口参数:

TimeOut:超时时间(秒) 出口参数:

data:返回客户评价信息 1-- 好;2-- 中;3-- 差

返回值 > 0返回客户评价信息长度 0 错误

备注 函数声明

功能描述 参数含义

12、DES加密

函数声明 功能描述 参数含义

void LKE_DES(BYTE *InData , BYTE *Key, BYTE *OutData, BOOL Mode=FALSE)

用密钥Key对InData进行加密,返回密文数据OutData 入口参数:

InData:明文数据(8字节)

Key: 加密密钥(8字节或16字节) Mode: FALSE 采用64bit DES加密 TRUE 采用128bit 3DES加密 出口参数:

OutData:密文数据(8字节) 无

返回值 备注

Copyright 2011-2012 LKE Co,. Limited

6

13、UNDES解密

函数声明 功能描述 参数含义

void LKE_UNDES(BYTE *InData , BYTE *Key, BYTE *OutData, BOOL Mode=FALSE)

用密钥Key对InData进行解密,返回明文数据OutData 入口参数:

InData:密文数据(8字节)

Key: 解密密钥(8字节或16字节) Mode: FALSE 采用64bit DES解密 TRUE 采用128bit 3DES解密 出口参数:

OutData:明文数据(8字节) 无

返回值

14、IBM3624数据解包

int LKE_IBM3624(BYTE *InData ,char *OutData)

将明文IBM3624数据包InData转换为字符串OutData 入口参数:

InData: 明文IBM3624数据包(8字节) 出口参数:

OutData: 明文字符串

返回值 明文数据包长度

备注 InData:为明文IBM3624数据包。对密文IBM3624数据包需要先用

LKE_UNDES函数解密。可配合LKE_DKB_Read_IBM3624函数使用。 函数声明 功能描述 参数含义

15、ANSI98数据解包

int LKE_ANSI98(char* CardNo,BYTE *InData ,char *OutData) 将明文ANSI9.8数据包InData转换为字符串OutData 入口参数:

CardNo: 12位长度的卡号

InData: 明文ANSI9.8数据包(8字节) 出口参数:

OutData: 明文字符串

返回值 >0明文数据包长度 0 错误

备注 InData:为明文ANSI9.8数据包。对密文ANSI9.8数据包需要先用

LKE_UNDES函数解密。可配合LKE_DKB_Read_ANSI98函数使用

函数声明 功能描述 参数含义

Copyright 2011-2012 LKE Co,. Limited

7

五、IC卡函数

1、打开IC卡端口(仅适用于LKE2666金卡读写器)

函数声明 int LKE_IC_Open()

功能描述 打开金卡读写器上的IC卡端口 参数含义 无 返回值 1 成功 0 失败

备注

2、关闭IC卡端口(仅适用于LKE2666金卡读写器)

函数声明 int LKE_IC_Close()

功能描述 关闭LKE2666金卡读写器上的IC卡端口 参数含义 无 返回值 1 成功 0 失败

备注

3、选择IC卡端口号并定义IC卡类型

int LKE_IC_SelectCard(int CardNo,int CardType) 选择IC卡端口号并定义IC卡类型 入口参数:

CardNo:IC卡端口号 0-主卡, 1-辅卡,2-SAM1,3-SAM2,4-SAM3,

5-SAM4,6-SAM5

CardType:IC卡类型 2 - CPU卡,9 – SLE4432/4442,48– AT88SC102

34 - Mifare PBOC CPU Type A&B

出口参数:无

返回值 1 成功 <0 返回错误代码(见附录二) 备注 只有在该命令成功执行以后,之后命令才能执行 函数声明 功能描述 参数含义

4、检查IC卡插入状态

函数声明 int LKE_IC_CardPresent() 功能描述 检查指定端口IC卡插入状态 参数含义 无 返回值 1 卡已插入 0 卡未插入 <0 返回错误代码(见附录二) 备注 1、指定的IC卡端口由 LKE_IC_SelectCard的参数CardNo定义

2、对SAM卡无效

Copyright 2011-2012 LKE Co,. Limited

8

5、上电

int LKE_IC_PowerUp(int *ATR_Len,BYTE *ATR) 给指定的IC卡端口上的IC卡上电 入口参数:无 出口参数:

ATR_Len:IC卡复位应答信息长度 ATR: IC卡复位应答信息

返回值 1 成功 <0 返回错误代码(见附录二) 备注 指定的IC卡端口由 LKE_IC_SelectCard的参数CardNo定义 函数声明 功能描述 参数含义

6、下电

函数声明 int LKE_IC_PowerDown()

功能描述 给指定的IC卡端口上的IC卡下电 参数含义 无 返回值 1 成功 <0 返回错误代码(见附录二) 备注 指定的IC卡端口由 LKE_IC_SelectCard的参数CardNo定义

7、APDU交换1

int LKE_IC_Exchange_APDU(G_APDU_COMM *ApduComm,G_APDU_RESP

*ApduResp)

功能描述 与指定的IC卡端口上的IC卡进行APDU数据交换 参数含义 入口参数:

ApduComm:APDU指令包(结构类型见附录一) 出口参数:

ApduResp: APDU应答包(结构类型见附录一)

返回值 1 成功 <0 返回错误代码(见附录二) 备注 指定的IC卡端口由 LKE_IC_SelectCard的参数CardNo定义; 函数声明

8、APDU交换2

int LKE_IC_Exchange_APDU1(int ApduCommLen,unsigned char *ApduComm

, G_APDU_RESP *ApduResp )

功能描述 与指定的IC卡端口上的IC卡进行APDU数据交换 参数含义 入口参数:

ApduCommLen:APDU指令包长度,包括CLA INS P1 P2 Lc data Le ApduComm: APDU指令包,包括CLA INS P1 P2 Lc data Le 出口参数:

ApduResp: APDU应答包(结构类型见附录一)

返回值 1 成功 <0 返回错误代码(见附录二) 备注 指定的IC卡端口由 LKE_IC_SelectCard的参数CardNo定义; 函数声明

Copyright 2011-2012 LKE Co,. Limited

9

9、APDU交换3

int LKE_IC_Exchange_APDU2(int ApduCommLen,unsigned char *ApduComm, int *ApduRespLen,unsigned char *ApduResp )

功能描述 与指定的IC卡端口上的IC卡进行APDU数据交换 参数含义 入口参数:

ApduCommLen:APDU指令包长度,包括CLA INS P1 P2 Lc data Le ApduComm: APDU指令包,包括CLA INS P1 P2 Lc data Le 出口参数:

ApduRespLen: APDU应答包长度,包括SW1,SW2 ApduResp: APDU应答包,包括SW1,SW2

返回值 1 成功 <0 返回错误代码(见附录二) 备注 指定的IC卡端口由 LKE_IC_SelectCard的参数CardNo定义; 函数声明

10、数据拆字

函数声明 功能描述 参数含义

int LKE_Split(int Len,unsigned char *In, char* Out) 将In输入数据包转换为字符串输出Out 入口参数:

Len:输入数据包长度 In: 输入数据包 出口参数:

Out:输出字符串 拆字后的长度

返回值 备注

11、检测逻辑加密卡类型(仅适用于特定机型)

int LKE_IC_Memory_Detect(int *Data_Len,BYTE *Data) 检测逻辑加密卡的类型 入口参数:Null 出口参数:

Data_Len:ATR数据包长度 Data: ATR数据包

返回值 >0为检测到的卡片类型;<0返回错误代码(见附录二)

8— SLE4428 9— SLE4442 48— AT88SC102 50— AT88SC153 备注

函数声明 功能描述 参数含义

Copyright 2011-2012 LKE Co,. Limited

10

12、校验逻辑加密卡密码

int LKE_IC_Memory_CmpSc(int Zone,BYTE *Sc) 校验逻辑加密卡密码 入口参数:

Zone为区域代码

对于AT88SC102其定义为:

Zone=0 密码, =1 应用区一擦除密码, =2应用区二擦除密码 对于SLE4442, Zone 无效 Sc为用于存储密码的字符型指针 出口参数:Null

返回值 1 成功 <0 返回错误代码(见附录二)

备注

函数声明 功能描述 参数含义

13、读逻辑加密卡(仅适用于特定机型)

Zone,int StartAdd,int Len,BYTE *Buff) iInt LKE_IC_Memory_Read(int

从逻辑加密卡中读取数据 入口参数:

Zone:区域代码

对于AT88SC102,其定义为:

Zone=0 公共区, =1 应用区一, =2应用区二 对于SLE4442,其定义为:

Zone=0 密码区, =1 位保护区, =2数据区 StartAdd:要读字节的起始地址 Len:要读的字节长度 出口参数:

Buff为用于存储读出数据的字符型指针

返回值 1 成功 <0 返回错误代码(见附录二)

备注

函数声明 功能描述 参数含义

14、写逻辑加密卡(仅适用于特定机型)

int LKE_IC_Memory_Write(int Zone,int StartAdd,int Len,BYTE *Buff) 向逻辑加密卡写入数据 入口参数:

Zone:区域代码

对于AT88SC102,其定义为:

Zone=0 公共区, =1 应用区一, =2应用区二 对于SLE4442,其定义为:

Zone=0 密码区, =1 位保护区, =2数据区 StartAdd:要写字节的起始地址 Len:要写的字节长度

Buff:用于存储写入数据的字符型指针 出口参数:Null

返回值 1 成功 <0 返回错误代码(见附录二)

备注

函数声明 功能描述 参数含义

Copyright 2011-2012 LKE Co,. Limited

11

15、取随机数(仅适用于特定机型)

*OutData) int LKE_IC_Get_Random(BYTE

从IC卡读写器中取8字节随机数 入口参数:Null 出口参数:

OutData:取到的8字节数据

返回值 1 取随机数成功 <0 返回错误代码(见附录二)

备注

函数声明 功能描述 参数含义

16、下载密钥到IC卡读写器(仅适用于特定机型)

KeyNo,int Len,BYTE *Key,BYTE *CheckValue) int LKE_IC_LoadKey(int

下载密钥到IC卡读写器 入口参数:

KeyNo: 密钥号(0~15)

0号密钥固定为充值密钥,1号密钥固定为消费密钥,15号密钥固定为外部认证密钥

Len: 密钥长度 8或16 Key: 密钥数据 出口参数:

4字节CheckValue(加密8个00后取前4个字节)

返回值 1 下载密钥成功 <0 返回错误代码(见附录二)

备注

函数声明 功能描述 参数含义

17、外部认证(仅适用于特定机型)

KeyNo,BYTE *InData) 函数声明 int LKE_IC_External_Auth(int

功能描述 IC卡读写器执行外部认证 参数含义 入口参数:

KeyNo: 密钥号,固定为15 InData: 8字节密文数据 出口参数:Null

返回值 1 外部认证成功 <0 返回错误代码(见附录二)

备注

Copyright 2011-2012 LKE Co,. Limited

12

18、加密数据串(仅适用于特定机型)

函数声明 Int LKE_IC_CipherData(int KeyNo,int Len,BYTE *InData,BYTE *OutData) 功能描述 IC卡读写器用指定密钥加密数据 参数含义 入口参数:

KeyNo: 密钥号(0~15)

Len: 明文数据长度(可取8或16字节) InData : 8字节或16字节明文数据 出口参数:

OutData: 用指定密钥号加密的密文

返回值 1 成功 <0 返回错误代码(见附录二)

备注

19、检测Mifare卡类型(仅适用于特定机型)

int LKE_IC_Mifare_Detect() 检测Mifare卡的类型 入口参数:Null 出口参数:Null

返回值 >0为检测到的卡片类型;<0返回错误代码(见附录二)

32 Mifare One S50卡 33 Mifare One S70卡 34 非接触CPU卡 备注 函数声明

功能描述 参数含义

20、认证Mifare卡(仅适用于特定机型)

int LKE_IC_Mifare_Auth(int BlockNo,int AuthMode,BYTE* Key) 认证块密钥Key 入口参数:

BlockNo:块号(0~255) AuthMode::认证模式 0 KeyA 1 KeyB

Key:6字节认证密钥 出口参数:Null

返回值 1 成功 <0 返回错误代码(见附录二)

备注

函数声明 功能描述 参数含义

Copyright 2011-2012 LKE Co,. Limited

13

21、读Mifare卡(仅适用于特定机型)

int LKE_ IC_Mifare_Read(int BlockNo,int ReadMode,BYTE* OutData) 读指定的块内容 入口参数:

BlockNo:块号(0~255) ReadMode:

0 读16字节的值 1 读4字节Value值 出口参数:

OutData:读取的16字节或4字节(Value)数据

返回值 1 成功 <0 返回错误代码(见附录二)

备注 函数声明

功能描述 参数含义

22、写Mifare卡(仅适用于特定机型)

int LKE_IC_Mifare_Write(int BlockNo,int WriteMode,int WriteLen, BYTE* WriteData)

功能描述 写指定的块内容 参数含义 入口参数:

BlockNo: 块号(0~255) WriteMode:写卡模式 0 写16字节的值 1 写4字节的值,读卡器会将这四个字节的数据按Value格式重新打包 2 DECREMENT(4字节) 3 INCREMENT(4字节)

注:Block0是Manufacturer block,不能写

WriteLen:需要写入数据的长度 (固定为16或4字节) WriteData:需要写入的数据 出口参数:Null

返回值 1 成功 <0 返回错误代码(见附录二)

备注 函数声明

23、备份Mifare卡的块(仅适用于特定机型)

int LKE_IC_Mifare_Restore(int BlockNo,int BackBlockNo) 将BlockNo块内容备份到BackBlockNo块 入口参数:

BlockNo: 块号(0~255) BackBlockNo: 备份块号(0~255) 出口参数:Null

返回值 1 成功 <0 返回错误代码(见附录二) 备注 注:BlockNo与BackBlockNo块必须在同一扇区,且BlockNo必须为Value格

函数声明 功能描述 参数含义

Copyright 2011-2012 LKE Co,. Limited

14

24、更新Mifare卡密钥(仅适用于特定机型)

int LKE_ IC_Mifare_UpdataKey(int BlockNo,int Mode,BYTE* Key) 更新块密钥Key 入口参数:

BlockNo: 块号(0~255) Mode:Key类型 0 KeyA 1 KeyB Key:6字节新密钥 出口参数:Null

返回值 1 成功 <0 返回错误代码(见附录二) 备注 注:只能更新已认证成功的块 函数声明 功能描述 参数含义

25、认证读Mifare卡(仅适用于特定机型)

int LKE_IC_Mifare_AuthRead(int BlockNo,int ReadMode,int AuthMode, BYTE* Key,BYTE* OutData)

功能描述 认证指定块密钥Key并读块内容 参数含义 入口参数:

BlockNo:块号(0~255) ReadMode:

0 读16字节的值 1 读4字节Value值 AuthMode::认证模式 0 KeyA 1 KeyB

Key:6字节认证密钥 出口参数:

OutData:读取的16字节或4字节(Value)数据

返回值 1 成功 <0 返回错误代码(见附录二)

备注 函数声明

Copyright 2011-2012 LKE Co,. Limited

15

26、认证写Mifare卡(仅适用于特定机型)

Int LKE_IC_Mifare_AuthWrite(int BlockNo,int AuthMode,BYTE* Key, int WriteMode,int WriteLen,BYTE* WriteData)

功能描述 认证指定块密钥Key并写块内容 参数含义 入口参数:

BlockNo:块号(0~255) AuthMode::认证模式 0 KeyA 1 KeyB

Key:6字节认证密钥 WriteMode:写卡模式 0 写16字节的值

1 写4字节的值,读卡器会将这四个字节的数据按Value格式重新打包 2 DECREMENT(4字节) 3 INCREMENT(4字节)

注:Block0是Manufacturer block,不能写

WriteLen:需要写入数据的长度 (固定为16或4字节) WriteData:需要写入的数据 出口参数:Null

返回值 1 成功 <0 返回错误代码(见附录二)

备注

函数声明

Copyright 2011-2012 LKE Co,. Limited

16

附录一 数据结构

1、APDU指令包结构

typedef struct {

unsigned char Command[4]; unsigned char Lc; unsigned char DataIn[256]; unsigned char Le; } G_APDU_COMM;

其中Command[0]对应CLA,

Command[1]对应INS, Command[2]对应P1, Command[3]对应P2。

2、APDU应答包结构

typedef struct {

unsigned int LengthOut; unsigned char DataOut[512]; unsigned char SW1; unsigned char SW2; } G_APDU_RESP;

其中LengthOut 为APDU应答包中的数据长度,不包括SW1和SW2 DataOut为APDU应答包数据数组 SW1,SW2为状态码

附录二 IC卡返回错误代码

序号 错误代码 含义 1 -100 没有打开串口 2 -101 接收数据超时 3 -102 接收数据格式错 4 -103 接收数据长度错 5 -104 卡没有响应 6 -105 卡已下电 7 -106 没有插卡 8 -107 卡端口号错误 9 -108 卡类型错误 10 -109 命令错误 11 -110 密码错误 12 -111 命令长度错误

13 -112 卡区域错误(针对逻辑加密卡) 14 -120 其他错误

Copyright 2011-2012 LKE Co,. Limited

17

附录三 密码键盘相关说明

1.1 数据回送格式:STX+LEN+数据流+ETX。

(STX为0x02,LEN为数据长度,ETX为0x03) 数据流需经拆字变换

 在加密模式,LEN是为0x10;

 在非加密模式下,LEN实际输入密码长度的两倍。

1.2 对于拆字方式,其数据转换原则是:

将被拆字节高、低4位分别组成一个字节,然后加上0x30,使之变成可显示字符。 如0x39转换后变成0x30、0x39,0xEF转换后变成0x3E、0x3F。

1.3 密码键盘共设置1个主密钥,256个工作密钥(0x00~0xFF)。

附录四 ANSI 9.8 PINBLOCK格式

ANSI 9.8 PINBLOCK格式是由两个16进制数据串异或而成,其长度为16字节。 1.第一个数字串包含着持卡人的密码资料(PIN):

A. 第一个字节为0;

B. 第二个字节是密码长度,最大12字节; C. 密码从第三字节开始,不够16字节用‘F’填补。

2.第二个数字串包含基本帐户号(PAN)或卡号(CARDNO)的最右边的12字节(不包含校验字节)。若PAN不够12字节,则要包含校验字节,不够16字节用‘0’填补。 举例:

基本帐户号(PAN):5759990123456789(最后一个字节9是校验字)。 持卡人密码(PIN):9876

第一数字串:04 98 76 FF FF FF FF FF 第二数字串:00 00 99 90 12 34 56 78 PINBLOCK:04 98 EF 6F ED CB A9 87

Copyright 2011-2012 LKE Co,. Limited

18

附录五 IBM3624 格式

IBM3624格式是由1个16进制数据串组成,其长度为16字节,每位密码占用一个字节,不够16字节用‘F’填补。

举例:

持卡人密码(PIN):012345

IBM3624格式:01 23 45 FF FF FF FF FF

Copyright 2011-2012 LKE Co,. Limited

19

因篇幅问题不能全部显示,请点此查看更多更全内容