QT读取身份证信息
来源:互联网 发布:linux rps是什么意思 编辑:程序博客网 时间:2024/05/08 19:57
QT读取身份证信息
使用的是华视的读卡器,先去官网(http://www.chinaidcard.com/)下载读卡二次开发SDK,里边有二次开发的说明文档和示例,复制termb.dll 、sdtapi.dll、WltRs.dll等到程序路径下。使用 QLibrary 从 termb.dll 加载身份证读取相关的函数。
代码:
.h
#ifndef BP_READCARD_H#define BP_READCARD_H#include <QObject>#include <QLibrary>#include <QDebug>typedef int __stdcall (*CVR_InitComm)(int); //初始化typedef int __stdcall (*CVR_Authenticate)(); //卡认证typedef int __stdcall (*CVR_Read_FPContent)(); //读卡typedef int __stdcall (*CVR_GetPeopleName)(char *,int &); //获取姓名typedef int __stdcall (*CVR_GetPeopleIDCode)(char *,int &); //获取身份证号typedef int __stdcall (*CVR_CloseComm)(); //关闭链接//身份证信息struct stu_card_info{ QString name; QString ID;};class ReadCard:public QObject{ Q_OBJECTpublic: ReadCard(); ~ReadCard(); bool init_cvr();private: bool read_card_info(); bool load_function();signals: void read_finished(stu_card_info info); void read_error();private slots: void read_card();private: //身份证读取函数指针 CVR_InitComm func_cvr_InitComm {nullptr}; CVR_Authenticate func_cvr_Authenticate {nullptr}; CVR_Read_FPContent func_cvr_Read_FPContent {nullptr}; CVR_GetPeopleName func_cvr_GetPeopleName {nullptr}; CVR_GetPeopleIDCode func_cvr_GetPeopleIDCode{nullptr}; CVR_CloseComm func_cvr_CloseComm {nullptr}; //读取身份证的缓冲区 char m_buf[40]; int m_buf_size = 40; stu_card_info m_info;};#endif // BP_READCARD_H
.cpp
#include "bp_readcard.h"#include <QFile>ReadCard::ReadCard(){}ReadCard::~ReadCard(){ if(func_cvr_CloseComm) func_cvr_CloseComm();}//加载dll中的函数指针bool ReadCard::load_function(){ func_cvr_InitComm = {nullptr}; func_cvr_Authenticate = {nullptr}; func_cvr_Read_FPContent = {nullptr}; func_cvr_GetPeopleName = {nullptr}; func_cvr_GetPeopleIDCode= {nullptr}; func_cvr_CloseComm = {nullptr}; qRegisterMetaType<stu_card_info>("stu_card_info"); QLibrary lib("termb.dll"); if(lib.load()) //加载身份证读取库中的函数 { func_cvr_InitComm = (CVR_InitComm)lib.resolve("CVR_InitComm"); if(!func_cvr_InitComm) qDebug()<<"CVR_InitComm 解析失败"<<lib.errorString(); func_cvr_GetPeopleName = (CVR_GetPeopleName)lib.resolve("GetPeopleName"); if(!func_cvr_GetPeopleName) qDebug()<<"CVR_GetPeopleName 解析失败"<<lib.errorString(); func_cvr_GetPeopleIDCode = (CVR_GetPeopleIDCode)lib.resolve("GetPeopleIDCode"); if(!func_cvr_GetPeopleIDCode) qDebug()<<"CVR_GetPeopleIDCode 解析失败"<<lib.errorString(); func_cvr_Authenticate = (CVR_Authenticate)lib.resolve("CVR_Authenticate"); if(!func_cvr_Authenticate) qDebug()<<"CVR_Authenticate 解析失败"<<lib.errorString(); func_cvr_Read_FPContent = (CVR_Read_FPContent)lib.resolve("CVR_Read_FPContent"); if(!func_cvr_Read_FPContent) qDebug()<<"CVR_Read_FPContent 解析失败"<<lib.errorString(); func_cvr_CloseComm = (CVR_CloseComm)lib.resolve("CVR_CloseComm"); if(!func_cvr_CloseComm) qDebug()<<"CVR_CloseComm 解析失败"<<lib.errorString(); } else qDebug()<<"termb.dll load faild."<<lib.errorString(); return (func_cvr_InitComm && func_cvr_Authenticate && func_cvr_Read_FPContent && func_cvr_GetPeopleName && func_cvr_GetPeopleIDCode && func_cvr_CloseComm);}//初始化bool ReadCard::init_cvr(){ if(!load_function()) //加载函数失败 return false; int iPort, iRetUSB = 0, iRetCOM = 0; for (iPort = 1001; iPort <= 1004; iPort++) //USB { iRetUSB = func_cvr_InitComm(iPort); if (iRetUSB == 1) break; } if (iRetUSB != 1) { for (iPort = 1; iPort <= 4; iPort++) //port { iRetCOM = func_cvr_InitComm(iPort); if (iRetCOM == 1) break; } } if ((iRetCOM == 1) || (iRetUSB == 1)) return true; return false;}//读卡姓名身份证号bool ReadCard::read_card_info(){ if(func_cvr_Read_FPContent() == 1) { memset(m_buf,0,m_buf_size); if(1 == func_cvr_GetPeopleName(m_buf,m_buf_size)) { m_info.name = QString::fromLocal8Bit(m_buf); memset(m_buf,0,m_buf_size); if(1 == func_cvr_GetPeopleIDCode(m_buf,m_buf_size)) { m_info.ID = m_buf; emit read_finished(m_info); //删除读取身份证生成的文件 QFile::remove("wz.txt"); QFile::remove("fp.dat"); QFile::remove("zp.bmp"); return true; } } } emit read_error(); return false;}//读卡,尝试读,读失败尝试认证,认证成功再读一次void ReadCard::read_card(){ if(!read_card_info()) { if(1 == func_cvr_Authenticate()) { read_card_info(); } }}
使用时,调用 init_cvr 初始化成功后调用 read_card 读取身份证信息,然后接收读取完成的信号即可。读卡耗时比较久大概会有几百毫秒。
阅读全文
0 0
- QT读取身份证信息
- winform读取第二代身份证信息
- 身份证信息读取并写入Excel模板
- 读取身份证
- 身份证读取
- 读取身份证
- Qt读取字符信息乱码
- 身份证信息
- C#读取二代身份证
- C#读取二代身份证
- .net读取二代身份证
- 读取二代身份证
- 神思读卡器读取身份证
- 某NFC读取身份证
- 提取身份证信息
- 检查身份证信息是否合法
- 身份证信息查询
- 身份证信息查询系统
- Java构造器
- 后序、中序得前序、层序
- js中Date对象在谷歌和IE浏览器中的区别
- vi/vim的常用快捷键
- XTU.apk.apk逆向writeup
- QT读取身份证信息
- NLP14-基于Gensim中的Doc2Vec的试探
- Servlet第一个程序--实践操作(命令行)
- spring Quartz和 Spring Task定时任务
- css3多列布局
- pythoQT5 github project
- java三种排序算法的实现
- poj_1258_prime_就是dj减配版
- restful架构