提供多功能身份证社保卡读卡器Windows开发包文档,此文档适合EST-100智能卡读写器、EST-100社保卡读卡器、EST-100医保卡读卡器等系列产品,欢迎下载使用。
产品SDK开发包下载:http://www.eastcoms.com/service/downdrive/
EST-100多功能智能卡读写器接口文档
目录
EST-100多功能智能卡读写器接口文档1
一、接口文档维护记录2
二、EST-100多功能智能卡读写器读卡器SDK简介2
三、函数说明2
3.1、设备类2
3.1.1、连接读卡器2
3.1.2、断开连接3
3.1.3、蜂鸣器3
3.2、接触类3
3.2.1、CPU卡3
3.3、非接类4
3.3.1、非接卡前置步骤(必须)4
3.3.2、非接CPU卡(TypeA)5
3.3.2.1、TypeA卡上电复位5
3.3.2.2、TypeA卡执行APDU命令5
3.3.3、Mifare One(M1卡) 系列5
3.3.3.1、认证秘钥5
3.3.3.2、读卡6
3.3.3.3、写卡6
3.4、身份证6
3.4.1、读身份证信息(文字+照片)6
3.4.2、读身份证信息(文字+照片+指纹)7
3.4.3、读身份证物理ID号7
3.4.4、查询天线区域有无身份证7
3.4.5 get函数8
3.5、磁条9
3.6、辅助函数9
3.6.1、十六进制数组转hexstr字符串,例如:0x11,0x22 “1122”9
3.6.1、hexstr字符串转十六进制数组,例如:“1122” 0x11,0x229
3.7、卡片操作要点10
3.7.1typeACPU 卡操作顺序10
3.7.2typeB 卡操作顺序10
3.7.3M1卡操作顺序10
3.7.4接触CPU卡操作顺序10
3.8、状态码10
二、EST-100多功能智能卡读写器读卡器SDK简介
本文档描述了广东东信智能科技有限公司EST-100型号读写器SDK的函数定义、调用方法、参数以及返回值说明,供开发人员进行二次开发时使用。
三、函数说明
3.1、设备类
3.1.1、连接读卡器
函数原型:long API IC_Read_Open(char* dev_Name);
参数:[IN] dev_Name:固定值 “USB1”.
返回值:连接成功时返回句柄值(大于0),该值需保存作为其他函数的入参。
3.1.2、断开连接
函数原型:long API IC_Read_Close(long ReaderHandle);
参数:ReaderHandle:[IN] IC_Read_Open函数的返回值
返回值:无
3.1.3、蜂鸣器
函数原型:long API ICC_PosBeep(long ReaderHandle, unsigned char time);
参数:
ReaderHandle:[IN] IC_Read_Open函数的返回值
Time:[IN] 蜂鸣时间,0~10
返回值:成功返回0。
3.2、接触类
3.2.1、CPU卡
3.2.1.1、CPU卡上电复位
函数原型:
long API IC_Read_pre_PowerOn(long ReaderHandle,unsigned char ICC_Slot_No,unsigned char* Response);
参数:
ReaderHandle:[IN] IC_Read_Open函数的返回值
ICC_Slot_No:[IN]卡座号(如下)
0x01:大卡座
0x11~0x14:SAM1~SAM4卡座
Response:[OUT]上电返回的ATR
返回值:成功返回ATR的长度,<= 0表示失败。
3.2.1.2、CPU卡执行APDU命令
函数原型:long API IC_Read_Application(long ReaderHandle,unsigned char ICC_Slot_No, long Lenth_of_Command_APDU,unsigned char* Command_APDU, unsigned char* Response_APDU);
参数:
ReaderHandle:[IN] IC_Read_Open函数的返回值
ICC_Slot_No:[IN]卡座号,同上电复位
Lenth_of_Command_APDU:[IN]APDU命令长度
Command_APDU:[IN]APDU命令
Response_APDU:[OUT]响应数据
返回值:
成功返回响应数据的长度,<= 0表示失败
3.3、非接类
3.3.1、非接卡前置步骤(必须)
3.3.1.1、设置为TypeA/B
函数原型:long API PIC_Read_SetTypeA(long ReaderHandle);
long API PIC_Read_SetTypeB(long ReaderHandle);
参数:
ReaderHandle:[IN] IC_Read_Open函数的返回值
返回值:成功返回0
3.3.1.2、请求卡片
函数原型:long API PIC_Read_Request(long ReaderHandle);
参数:
ReaderHandle:[IN] IC_Read_Open函数的返回值
返回值:成功返回0
3.3.1.3、防碰撞
函数原型:long API PIC_Read_anticoll(long ReaderHandle,unsigned char *uid);
参数:
ReaderHandle:[IN] IC_Read_Open函数的返回值
Uid:[OUT] 卡片物理卡号,4字节
返回值:成功返回0
3.3.1.4、选择卡片
函数原型:long API PIC_Read_Select(long ReaderHandle,unsigned char cardtype);
参数:
ReaderHandle:[IN] IC_Read_Open函数的返回值
Cardtype:[IN]0x41表示TypeA/M1,0x42表示TypeB
返回值:成功返回0
3.3.2、非接CPU卡(TypeA)
3.3.2.1、TypeA卡上电复位
函数原型:long API PIC_Read_PowerOnTypeA(long ReaderHandle,unsigned char* Response);
参数:
ReaderHandle:[IN] IC_Read_Open函数的返回值
Response:[OUT]上电返回数据(ATS)
返回值:成功返回ATS长度,<= 0表示失败。
3.3.2.2、TypeA卡执行APDU命令
函数原型:long API PIC_Read_Application(long ReaderHandle, long Lenth_of_Command_APDU,unsigned char* Command_APDU, unsigned char* Response_APDU);
参数:
ReaderHandle:[IN] IC_Read_Open函数的返回值
Lenth_of_Command_APDU:[IN]APDU命令长度
Command_APDU:[IN]APDU命令
Response_APDU:[OUT]响应数据
返回值:
成功返回响应数据的长度,<= 0表示失败
3.3.3、Mifare One(M1卡) 系列
3.3.3.1、认证秘钥
函数原型:long API PIC_Read_Authentication_Pass(long ReaderHandle,unsigned char Mode, unsigned char SecNr,unsigned char *PassWord);
参数:
ReaderHandle:[IN] IC_Read_Open函数的返回值
Mode:[IN]要认证的Key类型,0x60表示KeyA,0x61表示KeyB。
Secnr:[IN]扇区号,S50卡范围:0~15、S70卡范围0~63
Key:[IN]秘钥,6字节
返回值:返回0表示成功,其他值失败。
3.3.3.2、读卡
函数原型:long API PIC_Read_Read(long ReaderHandle,unsigned char Addr,unsigned char *Data);
参数:
ReaderHandle:[IN] IC_Read_Open函数的返回值
Addr:[IN]块地址S50卡:0~63、S70卡:0~255
Response:[OUT]读出的卡数据,16字节
返回值:成功返回0,其它值失败。
3.3.3.3、写卡
函数原型:long API PIC_Read_Write(long ReaderHandle,unsigned char Addr,unsigned char *Data);
参数:
ReaderHandle:[IN] IC_Read_Open函数的返回值
Addr:[IN]块地址S50卡:0~63、S70卡:0~255
Data:[IN]待写入的卡数据,16字节
返回值:成功返回0,其它值失败。
3.4、身份证
3.4.1、读身份证信息(文字+照片)
函数原型:
long API PIC_Read_ReadIDMsg(long ReaderHandle,
const char* pBmpFile,
char *pName,
char *pSex,
char *pNation,
char *pBirth,
char *pAddress,
char *pCertNo,
char *pDepartment ,
char *pEffectData,
char *pExpire,
char * pErrMsg);
参数:
ReaderHandle:[IN] IC_Read_Open函数的返回值
pBmpFile:[IN]要生成照片的路径,例:”D:\\zp.bmp”
pName:[OUT]姓名,50字节
pSex:[OUT]性别,10字节
pNation:[OU]民族,10字节
pBirth:[OUT]出生日期,30字节
pAddress:[OUT]家庭住址,100字节
pIDNo:[OUT]身份号,50字节
pDepartment:[OUT]签发机关,50
pEffectDate:[OUT]有效起始日期,30字节
pExpireDate:[OUT]有效截止日期,30字节
pErrMsg:[OUT]错误提示,50字节
返回值:读卡成功返回0
3.4.2、读身份证信息(文字+照片+指纹)
函数原型:
long API PIC_Read_ReadIDCard(long ReaderHandle, char * pErrMsg);
参数:
ReaderHandle:[IN] IC_Read_Open函数的返回值
pErrMsg:[OUT]错误提示,50字节
返回值:读卡成功返回0,读卡成功后可调用下文get函数获取信息
3.4.3、读身份证物理ID号
函数原型:long API PIC_Read_ID_ReadUID(long ReaderHandle,unsigned char* UID);
参数:
ReaderHandle:[IN] IC_Read_Open函数的返回值
Response:[OUT]身份物理ID号,8字节
返回值:成功返回0,其它值失败。
3.4.4、查询天线区域有无身份证
函数原型:long API PIC_Read_ID_Request(long ReaderHandle);
参数:
ReaderHandle:[IN] IC_Read_Open函数的返回值
返回值:成功返回0,其它值失败。
3.4.5 get函数
函数获取信息功能包含证件类型
int API GetCardType();获取证件类型
0:居民身份证
1:外国人永久居留证
2:港澳台居民居住证
char* API GetName();姓名(类型为1时表示:外国人中文姓名)0、1、2
char* API GetSex();性别0、1、2
char* API GetNation();民族0
char* API GetBirth();出生日期0、1、2
char* API GetAddress();住址0、2
char* API GetCertNo();公民身份证号码(类型为1时表示:外国人居留证号码)0、1、2
char* API GetDepartemt();签发机关0、2
char* API GetEffectDate();有效起始日期0、1、2
char* API GetExpireDate();有效截止日期0、1、2
char* API GetBmpFileData();bmp格式照片数据0、1、2
int API GetBmpFile(char* pBmpfilepath);生成照片,入参参考文中3.4.10、1、2
int API IsFingerExist();是否含存在指纹信息:
存在时返回512或者1024
不存在时返回00、2
int API GetFingerprint(unsigned char* fpInfo);获取指纹数据:
成功时返回获取到的字节长度0、2
char* API GetEnName();外国人英文姓名1
char* API GetNationalityCode();外国人国籍代码,符合GB/T2659-2000规定1
char* API GetTXZHM();港澳台通行证号码2
char* API GetTXZQFCS();港澳台通行证签发次数2
注: 以上函数须在 “PIC_Read_ReadIDCard” 函数执行成功之后调用,否则获取不到有效信息。
3.5、磁条
函数原型:long API Rcard(long ReaderHandle,unsigned char ctime,int track,unsigned char *rlen,unsigned char *getdata);
参数:
ReaderHandle:[IN] IC_Read_Open函数的返回值
ctime:[IN]超时时间,单位:秒
track:[IN]磁道(1~3)磁道1~~磁道3 ,track=4时表示全轨一次性刷出,返回数据为TLV格式,例如:010101020201020303010203
rlen:[OUT]返回数据的长度
data:[OUT]返回的数据
返回值:0表示成功,其它表示失败。
3.6、辅助函数
3.6.1、十六进制数组转hexstr字符串,例如:0x11,0x22 “1122”
函数原型:long API HexToStr(unsigned char *Src,int len,unsigned char *Des );
参数:
Src:[IN]十六进制数组
Len:[IN]数据长度
Des:[OUT] 转换好的hexstr格式字符串。
返回值:返回0
3.6.1、hexstr字符串转十六进制数组,例如:“1122” 0x11,0x22
函数原型:long API StrToHex(unsigned char *Src, int len,unsigned char *Des);
参数:
Src:[IN]hexstr格式字符串
Len:[IN]字节长度
Des:[OUT]转换好的数据
返回值:返回转换好的十六进制数据。
3.7、卡片操作要点
3.7.1typeACPU 卡操作顺序
1 设置为TypeA卡片
2 请求卡片
3 防碰撞
4 选择卡片
5 上电
6 APDU 命令
3.7.2typeB 卡操作顺序
1 设置为TypeB卡片
2 上电
3 选卡
4 APDU 命令
3.7.3M1卡操作顺序
1 请求卡片
2 防碰撞
3 选择卡片
4 认证密钥
5 读或写
3.7.4接触CPU卡操作顺序
1 上电复位
2 APDU 命令
3.8、状态码
0操作成功
-2身份证寻卡/选卡失败
-4身份读卡失败
-11读卡器连接错
-12未建立连接(没有执行打开设备函数)
-13(动态库)不支持该命令
-14发给动态库的)命令参数错