文章目录


精伦身份证读卡器

精伦安全模块-身份证读卡器对接-Qt调用SDK_库文件

SDK

使用的是通用二次开发包V3.2的sdk

Dewlt.dll
JpgDll.dll
SavePhoto.dll
sdtapi.dll
sdtapi.h
Sdtapi.lib
二次开发接口说明V3.2.doc

sdk挺简单,库文件和头文件;

开发文档也挺详细,文档里带了一个c语言的例子,在这个例子基础上,稍作修改就可以拿到身份证信息。

qt调用测试读取身份证

库文件添加

在qtcreater中打开项目文件(.pro),然后右键选择“添加库”:

精伦安全模块-身份证读卡器对接-Qt调用SDK_二次开发_02

选择外部库:

精伦安全模块-身份证读卡器对接-Qt调用SDK_#include_03

点击“浏览”添加库文件,我这边是用window平台,就把linux和mac都去掉了。

精伦安全模块-身份证读卡器对接-Qt调用SDK_库文件_04

然后点下一步、完成即可。

精伦安全模块-身份证读卡器对接-Qt调用SDK_#include_05

添加后的内容如下:

win32: LIBS += -L$$PWD/card/ -lSdtapi

INCLUDEPATH += $$PWD/card
DEPENDPATH += $$PWD/card

编译器

这些dll库一般是用VS的编译的,所以项目需要使用vs的便器:

精伦安全模块-身份证读卡器对接-Qt调用SDK_精伦读卡器_06

测试代码

#include <QCoreApplication>
#include "sdtapi.h"
#include <QDebug>
#include <QTextEncoder>
#include <iostream>
#include <stdio.h>

int readCard()
{
int ret;
int iPort=1;

//初始化
ret=InitComm(iPort);
if ( ret )
{
//认证
ret= Authenticate ();
if (ret)
{
// ReadBaseMsg接口调用测试;

char Msg[200];
ret= ReadBaseMsg ((unsigned char*)Msg, 0 );
qDebug()<<"readBaseMsg: "<<ret<<", data: "<<QByteArray(Msg, 200).toHex();

if (ret > 0 ){
//显示文字及图片信息
char buf[64] = {0};
QByteArray data = QByteArray(Msg, 200);
// QString strUnicode;
// QByteArray strUtf8;
// QTextCodec* gbk = QTextCodec::codecForName("gbk"); //读卡器读出来的中文都是国标编码,如果需要UTF-8的编码,这里可以通过一下步骤转换为UTF-8编码
// QTextCodec *utf8 = QTextCodec::codecForName("UTF-8");

//姓名
memcpy(buf, data.left(31).data(), 31);
// strUnicode = gbk->toUnicode(buf);
// strUtf8 = utf8->fromUnicode(strUnicode);
std::cout<<"name: "<<buf<<std::endl;
std::cout<<"sex : "<<data.mid(31, 3).data()<<std::endl;


}


//ReadBaseInfos接口调用测试
char name[32] = {0};
char sex[8] = {0};
char folk[8] = {0};
char birth[16] = {0};
char code[32] = {0};
char addr[128] = {0};
char agency[32]= {0};
char start[16] = {0};
char end[16] = {0};

ret= ReadBaseInfos (name, sex,folk,birth,code,addr,agency,start,end );
if (ret > 0 )
{
printf("%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n",name, sex,folk,birth,code,addr,agency,start,end);
}

}
}

ret= CloseComm();
return ret;


}
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);

readCard();

return a.exec();
}

编译运行

精伦安全模块-身份证读卡器对接-Qt调用SDK_ico_07

上面是原始数据,下面是ReadBaseInfos接口返回的分段解析好的数据。

欢迎关注微信公众号:fensnote

精伦安全模块-身份证读卡器对接-Qt调用SDK_#include_08