精伦身份证读卡器
SDK
使用的是通用二次开发包V3.2的sdk
Dewlt.dll JpgDll.dll SavePhoto.dll sdtapi.dll sdtapi.h Sdtapi.lib 二次开发接口说明V3.2.doc
sdk挺简单,库文件和头文件;
开发文档也挺详细,文档里带了一个c语言的例子,在这个例子基础上,稍作修改就可以拿到身份证信息。
qt调用测试读取身份证
库文件添加
在qtcreater中打开项目文件(.pro),然后右键选择“添加库”:
选择外部库:
点击“浏览”添加库文件,我这边是用window平台,就把linux和mac都去掉了。
然后点下一步、完成即可。
添加后的内容如下:
win32: LIBS += -L$$PWD/card/ -lSdtapi INCLUDEPATH += $$PWD/card DEPENDPATH += $$PWD/card
编译器
这些dll库一般是用VS的编译的,所以项目需要使用vs的便器:
测试代码
#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(); }
编译运行
上面是原始数据,下面是ReadBaseInfos接口返回的分段解析好的数据。
代码上传至git:https://gitee.com/fensnote/demo_code/tree/master/qtCode/readCard