MT明泰读卡器API接口函数库使用说明.docx
《MT明泰读卡器API接口函数库使用说明.docx》由会员分享,可在线阅读,更多相关《MT明泰读卡器API接口函数库使用说明.docx(84页珍藏版)》请在冰豆网上搜索。
MT明泰读卡器API接口函数库使用说明
API接口函数库使用说明
内部文件:
V1.0.20
发布时间:
2015-04-29
版本更新记录
版本
发布时间
修订章节
作者
V.1.0.0
2011-04-18
建立文档
V1.0.1
2011-05-24
增加“接触式存储卡操作指令”
VI.0.2
2011-11-28
增加读序列号及磁条卡读数据命令
VI.0.3
2012-11-01
增加CPU卡波特率384000
林锐彬
V1.0.4
2013-01-15
增加密码键盘
林锐彬
VI.0.5
2013-08-02
增加二代证读取信息扩展接口
杨亚军
VI.0.6
2013-08-08
增加获取设备状态函数
傅冲
VI.0.7
2013-09-18
增力「EERPOM操作
傅冲
VI.0.8
2013-10-12
增加设置磁条卡模式函数
傅冲
VI.0.9
2014-06-03
二代证相关操作函数及调用说明完善
余菊萍
V1.0.10
2014-06-10
增加1604卡、删除二代证照片文件接口
杨亚军
V1.0.1
1
2014-06-17
增加二代证扩展二接口及设置保存二代证照片名字的接口
杨亚军
V1.0.1
2
2014-06-30
增加二代证接口扩展三及wit转bmp函数
杨亚军
V1.0.1.
3
2014-07-07
增加金融IC卡读姓名与卡号函数
蔡拔群
V1.0.1
4
2014-07-24
实现AT88SC1604卡伪个人化
杨亚军
V1.0.1
5
2014-11-06
修改二代证解码动态库动态加载失败的问题及磁条卡读取的BUG、添加二代证调用流程图
杨亚军
V1.0.1
6
2014-12-24
打开设备端口做了处理,如果已经打开就不再去打开,增加了获取接触、非接卡片是否存在、安全模块是否存在的
杨亚军
V1.0.1
7
2015-01-16
增加AT24C卡包括AT24C01.AT24C02.
AT24C04.AT24C08.AT24C16.AT24C32.
AT24C64.AT24C128.AT24C256
杨亚军
V1.0.1
8
2015-01-23
增加LED4个灯灭、亮、闪烁控制
杨亚军
V1.0.1
9
2015-01-27
增加非接触式CPU卡卡状态获取:
无卡、一张卡、多张卡
杨亚军
VI.0.20
2015-04-20
增加接触卡、非接A卡,非接B卡到位状态获取:
无卡、有卡
余菊萍
API接口函数库使用说明1
1.文档概述6
1.1.文档范围6
1.2.面向对象6
1.3.参考资料6
2.函数库介绍6
2.1.功能6
3.2.性能6
3.运行环境7
3.1.硬设备7
3.2.软件的运行平台7
4.3.函数调用方法8
3.3.1.Delphi调用32位动态库的方法8
4.3.2.VB调用32位动态库的方法9
5.3.3.VC调用32位动态库的方法10
5.API介绍11
1.1.函数调用流程11
4.1.1,非接触式存储卡API调用流程11
5.1.2.非接触式CPU卡片API调用流程11
6.1.3.接触式CPU卡片API调用流程11
7.1.4.接触式存储卡片API调用流程11
8.1.5.身份证API调用流程11
9.1.6.函数操作结果信息表15
2.2.设备操作函数组18
4.2.1打开读写器device_open18
5.2.2关闭读写器device_close18
6.2.3判断设备通讯类型device_gettype18
7.2.4设置通讯波特率device_setbaud19
8.2.5获取读写器版本信息device_version19
9.2.6读写器蜂鸣device_beep20
10.2.7LED灯控制device-ledctrl20
11.2.8获取读写器生产序列号device_readsnr20
12.2.9获取设备状态get_device_status21
13.2.10读取读卡器的EEPR0M22
14.2.11更新读卡器的EEPR0M22
15.2.12复位串口配置信息ReSetupComm23
16.2.13读卡器软复位device_reset23
17.2.14获取设备状态扩展get_device_statusEx23
18.2.15获取非接触式CPU卡卡片状态dev.cardstate24
19.2.16获取接触式CPU卡到位状态ICC_GetStatus25
20.2.17读EMID号Dev_GetEMID25
4.3接触式卡片操作函数26
4.3.1判断接触式卡片状态sam_slt_getstate26
4.3.2接触式卡片上电复位sam_slt_reset26
4.3.3接触式卡设置复位波特率sam_s1t_reset_baud27
4.3.4接触式卡片下电sam_slt_powerdown27
4.4.非接触CPU卡函数28
4.4.1激活非接触式卡open_card28
5.4.2设置非接触式卡片为halt状态rf_halt29
4.4.3应用层传输命令card_APDU29
4.5非接触式存储卡操作函数30
4.5.1激活非接触式存储卡rf_card30
5.5.2非接触式存储卡认证扇区rf_authentication32
6.5.3非接触式存储卡读数据rf_read32
7.5.4非接触式存储卡写数据rf_write33
8.5.5非接触式存储卡读值块rf.readval33
9.5.6非接触式存储卡写值块rf_initval34
10.5.7非接触式存储卡加值rf_increment34
11.5.8IF接触式存储卡减值rf_decrement35
12.5.9非接触式存储卡值传送rf_transfer35
4.6二代身份证操作函数35
4.6.1卡操作指令-身份证读卡IDCard_Read36
5.6.2卡操作指令一身份证读卡IDCard_ReadCard38
6.6.3卡操作指令根据索引获取身份证数据IDCard_GetCardInfo38
7.6.4获取二代证模块IDIDCard.GetModelD39
8.6.5身份证读卡模块扩展一IDCard_ReadCard_Extra39
9.6.6设置二代证照片存储路径IDCard_SetPhotoPath40
10.6.7设置二代证照片名字IDCard_SetPhotoName40
11.6.8读二代证信息扩展二IDCard.ReadCard.Ex40
12.6.9删除所有二代证照片文件delete_all_photofile42
13.6.10获取卡ID号IDCard_Read」DNUM42
14.6.11获取卡姓名IDCard.Name43
15.6.12获取卡性别IDCard_Sex43
16.6.13获取卡名族IDCard.Nation44
17.6.14获取卡出生日期IDCard_Birthday44
18.6.15获取卡出生地址IDCard_Address45
19.6.16获取卡身份证号IDCard.IDNumber45
20.6.17获取卡签发机构IDCard」ssueD叩artment46
21.6.18获取卡有效期起始日期IDCard_ValidFromDate46
22.6.19获取卡有效期截止日期IDCard_ValidExpiryDate47
23.6.20获取卡预留信息IDCard_Reserve47
24.6.21获取非接触式卡片类型CLCard.Open48
25.6.22获得读卡过程中生成文件的Base64编码GetFileBase64Buffer48
26.6.23读取二代证信息扩展三IDCard_ReadCard_ExTwo49
27.6.24wit转bmp文件iWlttoBmp49
28.6.25读二代证追加信息50
4.7工具函数50
4.7.1将16进制数转换为ASCII字符hex_asc50
5.7.2将ASCII字符转换为16进制数asc_hex51
6.7.3DES算法加密函数rf_encrypt51
7.7.4DES算法解密函数rf.decrypt52
8.7.5将16进制数转换为Base64字符hex_base6453
9.7.6将Base64字符转换为16进制数base64_hex53
10.7.7DES算法力口密函数des_encrypt54
11.7.8DES算法解密函数des.decrypt55
12.7.9IDES算法加密函数des3_encrypt55
13.7.10IDES算法解密函数des3_decrypt56
14.7.11将ASCII字符转换为10进制数asc_dec57
4.8接触式存储卡操作函数57
4.8.1设置接触式存储卡种类contact_settype58
5.8.2识别接触式存储卡种类centact_identifytype59
6.8.3接触式存储卡密码校验contact_passwordcheck60
7.8.4接触式存储卡读数据contact_read60
8.8.5接触式存储卡写数据contact_write61
9.8.6接触式存储卡密码初始化(更改密码)contact_passwordinit61
4.9磁条卡操作函数62
4.9.1获取磁条卡数据magnetic_read62
4.9.2设置磁条卡数据输出方式set_magnetic_mode63
4.10外挂密码键盘63
4.10.1密码键盘下载主密钥63
4.10.2密码键盘下载工作密钥(密钥为密文)64
4.10.3密码键盘激活主密钥和工作密钥65
4.10.4密码键盘设置键盘输入密码的长度65
4.10.5密码键盘设置键盘超时时间65
4.10.6获取键盘输入的密码(明文传输)66
4.10.7获取键盘输入的密码(密文传输)66
4.11AT88SC1604卡67
4.11.1读数据srd_160467
4.11.2写数据swr_160168
4.11.3校验应用区密码csc_160468
4.11.4校验擦除密码cesc_160469
4.11.5擦除数据ser_160469
4.11.6写密码wsc_160470
4.11.7伪个人化fakefus_160471
4.11.8个人化psnl_160471
4.12金融IC卡71
4.12.1读取金融IC卡卡号和姓名72
1.文档概述
1.1.文档范
该手册主要介绍二代证读写器、相关接口函数库的使用以及相关API的介绍。
在附录中介绍了读写器支持的卡型的卡片特性。
1.2.面向对象
购买了二代证读写器,欲使用二代证读写器进行二次开发的开发人员。
1.3.参考资料
(农行)金融ic卡读写器通讯协议说明
2.函数库介名
2.1.功能
API函数库提供了使用二代证读卡器对卡片操作时所用到的函数接口,包括以下几个方而:
A.设备操作函数组
B.接触式卡片操作函数
C.非接触式卡片操作函数
D.身份证操作函数
E.磁条卡操作函数
F.外挂键盘操作函数
2.2.性能
1.读写器通过串口或HID无驱设备与PC机进行通讯,不需要安装驱动程序。
2.API接口函数库封装了通过PC机来操作二代证读卡器时用到的各个函数,用户在执行操作时,只需调用相应的函数接口即可,不需要编写对读卡器的操作函数。
3.运行环境
3.1.硬设备
为运行本产品,您需要的硬设备的最小配置如下:
A.处理器:
80X86
B.内存:
64KB
C.硬盘:
2.0GB
D.USB接口一个
E.RS232串口一个
3.2.软件的运行平台
为运行本产品,您需要的支持软件如下:
A.操作系统:
Win7/WindowsVistaAVin2OO3AVinXPAVrin2OOO:
B.程序编写工具:
VC/VB/PB/Delphi等:
3.3.函数调用方法
3.3.1.Delphi调用32位动态库的方法
语法:
[PublicPrivateIprotected]FunctionFunctionName([Var][Arg1:
DatalXpe1;][Arg2:
DataI\pe2;...])[:
ReturnDataType];far;stdcall;externaFlibname,[NameAliasName];
调用语句的语法包含下而部分:
•关键字Public(可选),表示函数可以被程序代码中的任意部分访问。
•关键字Private(可选),表示函数在声明类的单元(源代码)外不能访问。
•关键字Protected(可选),表示保护函数,保护元素只能被当前类和它的子类访问。
•关键字Function(必选),表示调用函数,函数有返回值。
•FunctionName(必选),调用外部函数的名称,区分大小写。
•关键字Var(可选),表示通过引用传递参数,函数参数可以用值传递,也可以通过引用传递。
通过引用传递参数,它的值没被复制到存放函数例程参数的堆栈中,程序执行速度快。
通过引用传值,将允许过程和函数改变参数的值。
•ArgN:
DataT\-peN(可选),参数名以及参数类型,传递的参数类型可以是:
Shorint,Smallint,Longint,Integer(16/32),Single,Double,Extended,Currency,Date,Pchar,Object,Variant等。
•Rctumiype(可选),函数返回值的类型。
•Stdcall(必选),表示传递约定,这样调用模块(应用程序),与被调用模块(DLL)就使用相同的参数约定。
•关键字external(必选),声明访问外部函数。
•Libnamc(必选),访问的DLL名称,16位Delphi中外部声明不带扩展名的库名。
•Name'AliasName'(可选),Name指令可以为外部函数起别名,避免与系统例程和函数名称冲突。
外部程序调用的DLL函数,必须遵照下列规则:
(1)必须列在DLL的exports子句中。
(2)在Delphi3中,调用函数还需被声明为stdcall,来使用标准的WIN32参数传递技术。
代替优化的register参数传递技术。
(3)在WIN32中,DLL可以使用全局数据,该数据将不会通过调用应用程序来分享,每当应用程序装载DLL时,它在自己的地址空间中存储着DLL的全部数据。
注:
详细请参考ICCard\EXAMPLES目录下的使用范例。
3.3.2.VB调用32位动态库的方法
语法:
[PublicIPrivate]DeclareFunctionnameLibMlibnamen[AliasHaliasname9>][([arglist])][Astype]
Declare语句的语法包含下面部分:
•Public(可选)用于声明在所有模块中的所有过程都可以使用的函数。
•Private(可选),用于声明只能在包含该声明的模块中使用的函数。
•Name(必选),任何合法的函数名。
动态链接席的入口处(entrypoints)区分大小写。
•Libnamc(必选),包含所声明的函数动态链接座名或代码资源名。
•Alias(可选),表示将被调用的函数在动态链接库(DLL)中还有另外的名称。
当外部函数名与某个函数重名时,就可以使用这个参数。
当动态链接库的函数与同一范围内的公用变量、常数或任何其它过程的名称相同时,也可以使用Aliaso如果该动态链接库函数中的某个字符不符合动
态链接库的命名约定时,也可以使用Alias0
•Aliasname(可选)动态链接库。
如果首字符不是数字符号(#)*则aliasname是动态链接库中该函数入口处的名称。
如果首字符是(#),则随后的字符必须指定该函数入口处的顺序号。
•Arglist(可选),代表调用该函数时需要传递参数的变量表。
•Type(可选),Function返回值的数据类型:
可以是Byte、BooleaiKIntegerLong、CurrencyxSinglexDouble、Decimal(目前尚不支持)、Date、String(只支持变长)或Variant,用户定义类型,或对象类型。
arglist参数的语法如下:
[Optional][ByVaiIByRef][ParamArray]varname[()][Astype]
部分描述:
•Optional(可选),表示参数不是必需的。
如果使用该选项,贝ijarglist中的后续参数都必需是可选的,而且必须都使用Optional关键字声明。
如果使用了ParamArray,则任何参数都不能使用Optionalo
•ByVai(可选),表示该参数按值传递。
•ByRef(可选),表示该参数按地址传递。
•ParamArray(可选),只用于arglist的最后一个参数,表示最后参数是一个Variant元素的Optional数组。
使用ParamArray关键字可以提供任意数目的参数。
ParamArray关键字不能与ByVaRByRef或Optional一起使用。
•Vamame(必选),代表传给该函数参数的变量名;遵循标准的变量命名约定。
•()对数组变量是必需的。
指明varname是一个数组。
•type(可选),传递给函数参数的数据类型:
可以是除Decin间以外的任何类型。
说明:
Function的数据类型决定其返回值的数据类型。
可以在arglist之后使用As子句来指定函数返回值的数据类型。
在arglist中,可以使用As子句来指定任何传给该函数参数的数据类型。
不单可以指定为任何标准数据类型,还可以在arglist中指定AsAny来禁止类型检查,从而允许将任意数据类型传递给该函数。
空圆括号表示该Function没有参数,且VisualBasic应确保不会传递任何参数。
注意:
(1)当所调用的外部函数需要一个值为0的字符串时,就要使用vbNullString常数。
该常数与零
长度字符串("")是不相同的。
(2)VB5调用32位动态库,对于ASCII码值大于128的读写操作,请参考Examples中24系列的
BYREF传递方式:
16位动态库可以直接使用CHR函数转换。
(3)详细请参考ICCard'EXAMPLES目录下的使用范例。
3.3.3.VC调用32位动态库的方法
(1)在.CPP中包含“mtx_32.1T头文件:
(2)在工程文件中加入mtx_32.Hb文件。
(3)在C:
\WINDOWS\system32或工程文件中加入Getlnfo.dll文件。
4.API介以
4.1.函数调用流程
4.1.1,非接触式存储卡API调用流程
建立连接成功后软件中基于Mifareone卡测试一般的操作过程是:
।■读数
建立连接->寻卡->验证►写数据—►中止卡片
L►值操作
4.1.2.非接触式CPU卡片API调用流程
软件中基于非接触CPU卡片,一般的操作过程是:
建立连接成功->打开卡片->发送APDU命令->设置卡片状态为halt-〉中止卡片操作
4.1.3.接触式CPU卡片API调用流程
软件中基于接触式CPU卡片,一般的操作过程是:
建立连接成功上电复位-)获取卡片状态/发送APDU命令卡片下电。
4.1.4,接触式存储卡片API调用流程
软件中基于接触式存储卡片,一般的操作过程是:
建立连接成功设置存储卡种类->识别存储卡种类->密码校验->读数据/写数据/更改密码
4.1.5.身份证API调用流程
软件中基于身份证,一般的操作过程是:
目前我们的二代证接口有五套操作接口,下面分别对五套接口的操作流程都做一下详细描述,具体如下:
1.对于只需要读取二代证的情况,操作流程如下:
方案1、直接读取身份证信息的UNICODE码,通过返回的UNICODE码传入相关函数获取身份证信息。
建立连接成功-〉读卡,获取身份证信息的UNICODE码(IDCard_Read)->获取姓名(IDCard_Name)/获取性别(IDCard_Sex)・・./(保存照片IDCard_PhotoSave_Ex)->关闭设备流程图如下:
方案2、不需要二代证照片,直接读取身份证信息
建立连接成功->读卡(IDCard_ReadCard)->解析数据(IDCard_GetCardInfo)->关闭设备流程图如下:
方案3、需要设置二代证照片保存全路径(包括照片名字)及获取身份证信息
建立连接成功->读二代证扩展一(IDCard_ReadCard_Extra)解析数据(IDCard_GetCardInfo)->关
闭设备
流程图如下所示:
方案4、需要设置二代证照片路径、照片保存名字、需要照片信息的Base64码.
建立连接成功->设置照片存放路径(IDCard_SetPhotoPath)设置照片名字(IDCard_SetPhotoName)读二代证扩展二(IDCard_ReadCard_Ex)->关闭设备具体流程图如下所示:
注意:
上述四个方案,实际是四个身份证读卡函数,不建议一次二代证读卡,调用四个身份证读卡函数中的多个,
如果只是需要身份证部分信息(比如身份证号码),建议采用方案一:
如果只是需要读取身份证信息的明文,不需要保存照片,可以采用方案二、方案三(照片文件传空)、方案四(照片保存参数填0);
如果需要保存照片,并且指定照片保存的全路径(包括照片名字,比如:
C:
\zp.bmp),那么建议采用方案三;
如果需要修改保存照片的名字或者获取照片信息的Base64码,那么建议采用方案四。
2.对于需要读取多种非接卡的情况,操作流程如下:
建立连接成功->判断卡类型(CLCard.Open)->解析数据(IDCard.GetCardlnfo)关闭设备
4.L6.函数操作结果信息表
说明:
实际返回的错误信息为表中数据的负数形式,例如:
命令超时,返回-0x0011。
StatusH
StatusL
说明
OOH
OOH
命令执行正确回应
OOH
O1H
可选的功能接口或参数不支