一、文件说明
应用函数开发包含下列文件:termb.dll API函数的动态联接库
sdtapi.dll 安全模块通讯函数
WltRs.dll 身份证相片解码库
SysInfo.dll
适用操作系统:
Windows XP、Windows7(32位和64位)等常见操作系统;
适用开发语言:
Visual C++ 6.0 及以后版本
Visual Basic 6.0 及以后版本
Delphi 6.0 及以后版本
PowerBuilder 6.0 及以后版本
visual C# 2005 及以后版本
二、函数列表
//以下为主要API函数int CVR_InitComm(int Port) 初始化连接;
int CVR_Authenticate() 卡认证;
int CVR_Read_Content(int active) 读卡操作。
int CVR_Read_FPContent(int active) 读卡操作,含指纹。
int CVR_CloseComm() 关闭连接;
int CVR_FindCard () 找卡
int CVR_SelectCard() 选卡
1.居民身份证结构:
名称 | 含义 | 长度 | 备注 |
姓名 | 姓名 | 不超过30字节 | |
性别 | 性别 | 不超过2个字节,符合GB/T 2261.1的规定 | |
民族 | 民族 | 不超过20个字节,或10个unicode字符 | |
出生日期 | 出生日期 | 不超过16个字节,格式为YYMMDD | |
住址 | 户口所在地 | 不超过70个字节,或35个unicode字符 | |
公民身份证号码 | 证件号码 | 不超过36个字节,或18个unicode字符 | |
签发机关 | 签发机关 | 不超过30字节 | |
有效期起始日期 | 有效期起始日期 | 不超过16个字节,格式为YYMMDD | |
有效期终止日期 | 有效期终止日期 | 不超过16个字节,格式为YYMMDD | |
照片内容 | 照片内容 | 若取得bmp数据,则不超过38862字节,jpg数据长度可变 | |
指纹数据 | 指纹数据 | 不超过1024字节,二进制数据 | 需证件内含有指纹 |
2.外国人居留证结构:
名称 | 含义 | 长度 | 备注 |
英文姓名 | 外国人英文姓名 | 不超过120字节 | |
性别 | 外国人性别 | 不超过2个字节,符合GB/T 2261.1的规定 | |
永久居留证号码 | 证件号码 | 不超过30个字节,或15个unicode字符 | |
国籍、地区代码 | 国籍或所在地区代码 | 参考GB/T 2659-2000中文缩写 | |
中文姓名 | 中文姓名 | 不超过30个字节,或15个unicode双字节(UTF16)字符 | |
证件签发日期 | 证件签发日期 | 不超过16个字节,格式为YYMMDD | |
证件终止日期 | 证件终止日期 | 不超过16个字节,格式为YYMMDD | |
出生日期 | 出生日期 | 不超过16个字节,格式为YYMMDD | |
证件版本号 | 证件版本号 | 不超过4字节 | |
受理机关代码 | 当次申请受理机关代码 | 不超过8个字节 | |
证件类别 | 证件类别 | “I” | |
照片内容 | 照片内容 | 若取得bmp数据,则不超过38862字节,jpg数据长度可变 |
3.港澳台居住证结构:
名称 | 含义 | 长度 | 备注 |
姓名 | 姓名 | 不超过30字节 | |
性别 | 性别 | 不超过2个字节,符合GB/T 2261.1的规定 | |
出生日期 | 出生日期 | 不超过16个字节,格式为YYMMDD | |
住址 | 户口所在地 | 不超过70个字节,或35个unicode字符 | |
公民身份证号码 | 证件号码 | 不超过36个字节,或18个unicode字符 | |
签发机关 | 签发机关 | 不超过30字节 | |
有效期起始日期 | 有效期起始日期 | 不超过16个字节,格式为YYMMDD | |
有效期终止日期 | 有效期终止日期 | 不超过16个字节,格式为YYMMDD | |
通行证号码 | 通行证号码 | 不超过18个字节 | |
签发次数 | 签发次数 | 不超过4字节 | |
证件类别 | 证件类别 | “J” | |
照片内容 | 照片内容 | 若取得bmp数据,则不超过38862字节,jpg数据长度可变 | |
指纹数据 | 指纹数据 | 不超过1024字节,2进制数据 |
注:CVR_Authenticate功能和CVR_FindCard+ CVR_SelectCard一样,CVR_Authenticate内部调用了找卡和选卡函数,接口分开是为了调用者开发方便。
三、函数详细说明
//以下为可选API函数,方便二次开发,多字节版本
红色字体代表读取到的身份证信息
蓝色字体代表读取到的外国人永久居留身份证信息
绿色字体代表读取到的港澳台居民居住证信息
int GetPeopleName(char *strTmp, int *strLen)
得到姓名信息
得到英文姓名信息
得到姓名信息
int GetPeopleSex(char *strTmp, int *strLen)
得到性别信息
得到性别信息
得到性别信息
int GetPeopleNation(char *strTmp, int *strLen)
得到民族信息
得到国籍信息
int GetPeopleBirthday(char *strTmp, int *strLen)
得到出生日期
得到出生日期
得到出生日期
int GetPeopleIDCode(char *strTmp, int *strLen)
得到身份证号信息
得到永久居证号码
得到公民身份号码
int GetDepartment(char *strTmp, int *strLen)
得到发证机关信息
得到档次受理申请机关代码
得到签发机关信息
int GetStartDate(char *strTmp, int *strLen)
得到有效开始日期
得到有效开始日期
得到有效开始日期
int GetEndDate(char *strTmp, int *strLen)
得到有效截止日期
得到有效截止日期
得到有效截止日期
int GetNationCode(unsigned char * nationData, int *strLen)
得到居民民族代码
得到外国人国籍代码
int GetSexCode(unsigned char * sexData, int * pLen)
得到性别代码
得到性别代码
得到性别代码
int GetCertType (unsigned char * nationData, int *pLen)
获取证件类别
(身份证返回值为空,外国人永居证返回值为“I”,港澳台居民居住证返回值为“J”)
int GetFPDate (unsigned char *pData, int * pLen)
得到指纹数据,不超过1024字节
得到指纹数据,不超过1024字节
int GetPeopleAddress (char *strTmp, int *strLen)
得到地址信息
得到地址信息
int GetPassCheckID( unsigned char *strTmp, int *strLen);
通行证号码,18字节
int WINAPI GetIssuesNum(int *IssuesNum);
签发次数,4字节
int GetNewAppMsg (unsigned char * nationData, int *pLen)
获取追加地址
int GetBMPData (unsigned char *pData, int * pLen)
得到头像照片bmp数据,不超过38862字节
int Getbase64BMPData (unsigned char *pData, int * pLen)
得到头像照片base64编码数据,不超过38862*2字节
int Getbase64JpgData (unsigned char *pData, int * pLen)
得到头像照片jpg数据,不超过38862字节
int GetJpgData(unsigned char * jpgData, int * pLen)
获取jpg二进制数据
int GetPeopleChineseName( unsigned char *strTmp, int *strLen)
获取外国人中文姓名
int GetPeopleCertVersion( unsigned char *strTmp, int *strLen)
得到外国人证件版本
int CVR_GetSAMID(char *SAMID)
得到安全模块号
//以下为可选API函数,方便二次开发,传入参数为unicode字符地址
红色字体代表读取到的身份证信息
蓝色字体代表读取到的外国人永久居留身份证信息
绿色字体代表读取到的港澳台居民居住证信息
int GetPeopleNameU(char *strTmp, int *strLen)
得到姓名信息
得到英文姓名信息
得到姓名信息
int GetPeopleSexU (char *strTmp, int *strLen)
得到性别信息
得到性别信息
得到性别信息
int GetPeopleNationU (char *strTmp, int *strLen)
得到民族信息
得到国籍信息
int GetPeopleBirthdayU (char *strTmp, int *strLen)
得到出生日期
得到出生日期
得到出生日期
int GetPeopleIDCodeU (char *strTmp, int *strLen)
得到身份证号信息
得到永居证号码
得到公民身份号码
int GetDepartmentU (char *strTmp, int *strLen)
得到发证机关信息
得到档次受理申请机关代码
得到签发机关信息
int GetStartDateU (char *strTmp, int *strLen)
得到有效开始日期
得到有效开始日期
得到有效开始日期
int GetEndDateU (char *strTmp, int *strLen)
得到有效截止日期
得到有效截止日期
得到有效截止日期
int GetNationCodeU (unsigned char * nationData, int *pLen)
得到居民民族代码
得到外国人国籍代码
int GetSexCodeU(unsigned char * sexData, int * pLen)
得到性别代码
得到性别代码
得到性别代码
int GetCertTypeU (unsigned char * nationData, int *pLen)
获取证件类别
(身份证返回值为空,外国人永居证返回值为“I”,港澳台居民居住证返回值为“J”)
int GetPeopleAddressU (char *strTmp, int *strLen)
得到地址信息
得到地址信息
int GetFPDate (unsigned char *pData, int * pLen)
得到指纹数据,不超过1024字节
得到指纹数据,不超过1024字节
int GetPassCheckIDU( unsigned char *strTmp, int *strLen);
通行证号码,18字节
int WINAPI GetIssuesNumU(int *IssuesNum);
签发次数,4字节
int GetNewAppMsg U(unsigned char * nationData, int *pLen)
获取追加地址
int GetBMPData (unsigned char *pData, int * pLen)
得到头像照片bmp数据,不超过38862字节
int Getbase64BMPDataU (unsigned char *pData, int * pLen)
得到头像照片base64编码,不超过38862*4字节
int Getbase64JpgData U (unsigned char *pData, int * pLen)
得到头像照片jpg的base64编码,不超过38862*2字节
int GetJpgData(unsigned char * jpgData, int * pLen)
获取jpg二进制数据
int GetPeopleChineseNameU( unsigned char *strTmp, int *strLen)
得到外国人中文姓名
int GetPeopleCertVersionU( unsigned char *strTmp, int *strLen)
得到外国人证件版本
int CVR_GetSAMIDU (char *SAMID)
得到安全模块号
四、函数说明
1.初始化连接
原 型:int CVR_InitComm (int Port)说 明:本函数用于PC与第二代居民身份证阅读器的连接。
参 数:Port:连接串口(COM1~COM16)或USB口(1001~1016)
参数名 | 含义 | 取值范围 |
int Port | 端口编号 | 见下表 |
值 | 意义 |
1 | 串口1 |
2 | 串口2 |
3 | 串口3 |
... | ... |
16 | 串口16 |
1001 | USB口1 |
1002 | USB口2 |
1003 | USB口3 |
... | ... |
1016 | USB口16 |
返 回 值:
值 | 意义 |
1 | 正确 |
2 | 端口打开失败 |
-1 | 未知错误 |
-2 | 动态库加载失败 |
2.关闭端口
原 型:int CVR_CloseComm(void)
说 明:本函数用于关闭PC到阅读器的连接。
参 数:无
返 回 值:
值 | 意义 |
1 | 关闭成功 |
0 | 端口号不合法 |
-1 | 端口已经关闭 |
-2 | 动态库加载失败 |
3.卡认证
原 型:int CVR_Authenticate (void)说 明:本函数用于读卡器和卡片之间的合法身份确认。卡认证循环间隔大于300ms。
参 数:
返 回 值:
值 | 意义 | 说明 |
1 | 正确 | 卡片认证成功 |
2 | 错误 | 寻卡失败 |
3 | 错误 | 选卡失败 |
4 | 错误 | 未连接读卡器 |
0 | 错误 | 动态库未加载 |
(若卡片放置后发生认证错误时,请移走卡片重新放置。)
(若卡片放置后发生认证错误时,请移走卡片重新放置。)
4.读卡操作
原 型:int CVR_Read_Content(int active);说 明:本函数用于通过阅读器从第二代居民身份证中读取相应信息。卡认证成功以后才可做读卡操作,读卡完毕若继续读卡应移走二代证卡片重新放置做卡认证。
参 数:
参数名 | 含义 | 取值范围 |
int active | 临时目录中保存哪些文件 | 见取值说明 |
值 | 意义 |
1 | wz.txt,xp.wlt,zp.bmp,fp.dat |
2 | wz.txt,xp.wlt,fp.dat |
4 | wz.txt,zp.bmp,fp.dat |
C:\Users\mac\AppData\Local\Temp\chinaidcard。其中mac是用户名称。
以上为示例路径,请根据客户开发环境,确定实际路径。
文件说明:
文件名 | 意义 |
wz.txt | 身份证基本信息,如姓名、性别等 |
xp.wlt | 加密的头像数据 |
zp.bmp | 解密的头像数据 |
fp.dat | 指纹数据,若无指纹则该文件大小仍为1024字节,每个字节均为0 |
返 回 值:
返回值 | 意义 |
1 | 正确 |
0 | 错误,读身份证失败 |
4 | 错误,身份证读卡器未连接 |
99 | 动态库未加载 |
5.获取性别代码
原 型:int GetSexCode(unsigned char * sexData, int * pLen)说 明:本函数获取性别代码
参 数:
参数名 | 含义 | 取值范围 |
unsigned char * sexData | 缓冲区地址 | |
int * pLen | 缓冲区长度指针 | 4字节 |
值 | 意义 |
1 | 正确 |
0 | 错误 |
6.获取民族代码
原 型:int GetNationCode(unsigned char * nationData, int * pLen);说 明:本函数获取民族代码
参 数:
参数名 | 含义 | 取值范围 |
unsigned char * nationData | 缓冲区地址 | |
int * pLen | 缓冲区长度指针 | 4字节 |
返 回 值:
值 | 意义 |
1 | 正确 |
0 | 错误 |
五、信息格式说明
1.居民身份证txt文件格式
读卡成功后在临时目录下生成wz.txt(文字信息)和zp.bmp(照片信息),临时目录跟当前登录用户名称有关,如C:\Users\mac\AppData\Local\Temp\chinaidcard,其中xxx是当前用户名,比如Administratorwz.txt内容示例如下:
张红叶
女
汉
19881118
河北省邯郸市临漳县称勾镇称勾东村复兴路25号
130423198811184328
临漳县公安局
20110330-20210330
2.外国人永居证txt文件格式
读卡成功后在临时目录下生成wz.txt(文字信息)和zp.bmp(照片信息),临时目录跟当前登录用户名称有关,如C:\Users\mac\AppData\Local\Temp\chinaidcard,其中xxx是当前用户名,比如AdministratorZHENGJIAN,YANGBEN
证件样本
女
19810803
加拿大
CAN
20151025-20251024
CAN110081080319
1500
01
从上到下依次为:英文姓名,中文姓名,性别,出生日期,国籍,国籍代码,有效期限,证件号码,签发机关代码,证件版本号。
3.港澳台居民居住证TXT文件格式
读卡成功后在临时目录下生成wz.txt(文字信息)和zp.bmp(照片信息),临时目录跟当前登录用户名称有关,如C:\Users\xxx\AppData\Local\Temp\chinaidcard,其中xxx是当前用户名,比如Administratorwz.txt内容示例如下:
金鑫
女
19940823
北京市西城区复兴门外大街999号院11号楼3单元502室
810000199408230013
北京市公安局西城分局
20171027-20221026
000000000
1
六、其他函数用法
读各项文字信息到自定义内存缓冲
原 型:
int GetPeopleName(char *strTmp, int *strLen) //得到姓名信息
int GetPeopleSex(char *strTmp, int *strLen) //得到性别信息
int GetPeopleNation(char *strTmp, int *strLen) //得到民族信息
int GetPeopleBirthday(char *strTmp, int *strLen) //得到出生日期
int GetPeopleAddress(char *strTmp, int *strLen) //得到地址信息
int GetPeopleIDCode(char *strTmp, int *strLen) //得到卡号信息
int GetDepartment(char *strTmp, int *strLen) //得到发证机关信息
int GetStartDate(char *strTmp, int *strLen) //得到有效开始日期
int GetEndDate(char *strTmp, int *strLen) //得到有效截止日期
int CVR_GetSAMID(char * SAMID) //得到安全模块号码
参数:
*strTmp 返回的信息缓存指针。
*strLen 返回的信息长度指针。
返 回 值:
返回值 | 意义 |
1 | 正确 |
0 | 错误 |
注意:若采用查询方式自动判断卡片是否放置,则间隔时间建议大于600ms。