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
因篇幅问题不能全部显示,请点此查看更多更全内容