身份证阅读器Qt动态调用方法donsee32.dll实现读取身份证信息、社保卡信息、IC卡、银行卡等信息

Qt动态调用读取效果
Qt动态调用读取效果

导入读卡相关函数

{ui->setupUi(this);//动态调用方法 donsee32.dllm_hDLL = ::LoadLibrary(L"./donsee32.dll");if (m_hDLL == nullptr)ui->textEdit->append("加载动态库失败,请检查动态库路径");elseui->textEdit->append("加载动态库成功");fpDonsee_Open = (DONSEE_HID_OPEN_FUNC)GetProcAddress(m_hDLL,"Donsee_Open");fpDonsee_Close = (DONSEE_HID_CLOSE_FUNC)GetProcAddress(m_hDLL,"Donsee_Close");fpDonsee_Beep = (DONSEE_HID_BEEP_FUNC)GetProcAddress(m_hDLL,"Donsee_Beep");fpDonsee_Version = (DONSEE_HID_VERSION_FUNC)GetProcAddress(m_hDLL,"Donsee_Version");fpDonsee_ReadIDCard = (DONSEE_HID_ID_READ_INFO__FUNC)GetProcAddress(m_hDLL,"Donsee_ReadIDCard");fpDonsee_ReadIDCardUid = (DONSEE_HID_ID_READ_UID__FUNC)GetProcAddress(m_hDLL,"Donsee_ReadIDCardUid");fpDonsee_ReadSAMID = (DONSEE_HID_ID_READ_SAMID__FUNC)GetProcAddress(m_hDLL,"Donsee_ReadSAMID");fpDonsee_ReadSSCard = (DONSEE_HID_READ_SS_FUNC)GetProcAddress(m_hDLL,"Donsee_ReadSSCard");fpDonsee_GetBankCardNo = (DONSEE_HID_GET_BANK_CARD_FUNC)GetProcAddress(m_hDLL,"Donsee_GetBankCardNo");fpDonsee_ICSelect = (DONSEE_HID_IC_SELECT_FUNC)GetProcAddress(m_hDLL,"Donsee_ICSelect");fpDonsee_ICRequest = (DONSEE_HID_IC_REQUEST_FUNC)GetProcAddress(m_hDLL,"Donsee_ICRequest");fpDonsee_ICAnticoll = (DONSEE_HID_IC_ANTICOLL_FUNC)GetProcAddress(m_hDLL,"Donsee_ICAnticoll");fpDonsee_SetTypeA = (DONSEE_HID_SET_TYPEA__FUNC)GetProcAddress(m_hDLL,"Donsee_SetTypeA");fpDonsee_PowerOnTypeA = (DONSEE_HID_POWER_TYPEA__FUNC)GetProcAddress(m_hDLL,"Donsee_PowerOnTypeA");if ( 0|| (fpDonsee_Open == NULL)|| (fpDonsee_Close == NULL)|| (fpDonsee_Beep == NULL)|| (fpDonsee_Version == NULL)|| (fpDonsee_ReadIDCard == NULL)|| (fpDonsee_ReadIDCardUid == NULL)|| (fpDonsee_ReadSAMID == NULL)|| (fpDonsee_ReadSSCard == NULL)|| (fpDonsee_GetBankCardNo == NULL)|| (fpDonsee_ICSelect == NULL)|| (fpDonsee_ICRequest == NULL)|| (fpDonsee_ICAnticoll == NULL)|| (fpDonsee_SetTypeA == NULL)|| (fpDonsee_PowerOnTypeA == NULL)){ui->textEdit->append("定位 donsee32.dll 中的所需函数失败!");FreeLibrary(m_hDLL);}m_isOpen = false ;}

读身份证接口


void MainWindow::on_btnIDCard_clicked()
{if(m_isOpen == false){ui->textEdit->append("读卡器端口未打开") ;return  ;}IDINFO idInfo;char t_arrMsg[256];char t_szMsg[256] = "" ;// nType [in]:设置身份证读卡类型:0,文本信息;1,文本+照片;2,文本+照片+指纹int nType = 1;memset(&idInfo, 0, sizeof(IDINFO));//    char t_szPath[256] = "/tmp/IDPhoto.bmp";char t_szPath[256] = "./IDPhoto.bmp";// char t_szPath[256] = "";// char t_szPath[256] = NULL;long t_nRe = fpDonsee_ReadIDCard(nType,  t_szPath, &idInfo, t_arrMsg);if (t_nRe != 0){printf("读身份证失败\n");ui->textEdit->append("读身份证失败") ;return ;}else{QString t_strTemp1 , t_strTemp2 ;printf("读身份证成功\n");ui->textEdit->append("读身份证成功") ;t_strTemp1 = "中文姓名:" ;t_strTemp2 = GBKtoUtf8(idInfo.name) ;ui->textEdit->append(t_strTemp1 + t_strTemp2) ;printf(("英文姓名:%s\n"), idInfo.ENfullname);sprintf(t_szMsg,("英文姓名:%s"), idInfo.ENfullname) ;ui->textEdit->append(t_szMsg) ;t_strTemp1 = "性    别:" ;t_strTemp2 = GBKtoUtf8(idInfo.sex) ;ui->textEdit->append(t_strTemp1 + t_strTemp2) ;t_strTemp1 = "民    族:" ;t_strTemp2 = GBKtoUtf8(idInfo.people) ;ui->textEdit->append(t_strTemp1 + t_strTemp2) ;printf(("出身日期:%s\n"), idInfo.birthday);sprintf(t_szMsg,("出身日期:%s"), idInfo.birthday) ;ui->textEdit->append(t_szMsg) ;t_strTemp1 = "住    址:" ;t_strTemp2 = GBKtoUtf8(idInfo.address) ;ui->textEdit->append(t_strTemp1 + t_strTemp2) ;printf(("身份证号:%s\n"), idInfo.number);sprintf(t_szMsg,("身份证号:%s"), idInfo.number) ;ui->textEdit->append(t_szMsg) ;t_strTemp1 = "签发机关:" ;t_strTemp2 = GBKtoUtf8(idInfo.organs) ;ui->textEdit->append(t_strTemp1 + t_strTemp2) ;printf(("有效期开始:%s\n"), idInfo.signdate);sprintf(t_szMsg,("有效期开始:%s"), idInfo.signdate) ;ui->textEdit->append(t_szMsg) ;printf(("有效期结束:%s\n"), idInfo.validterm);sprintf(t_szMsg,("有效期结束:%s"), idInfo.validterm) ;ui->textEdit->append(t_szMsg) ;printf(("证件类别:%s\n"), idInfo.certType);sprintf(t_szMsg,("证件类别:%s"), idInfo.certType) ;ui->textEdit->append(t_szMsg) ;printf(("证件版本:%s\n"), idInfo.certVersion);sprintf(t_szMsg,("证件版本:%s"), idInfo.certVersion) ;ui->textEdit->append(t_szMsg) ;printf(("通行证号:%s\n"), idInfo.passNu);sprintf(t_szMsg,("通行证号:%s"), idInfo.passNu) ;ui->textEdit->append(t_szMsg) ;printf(("签发数次:%s\n"), idInfo.signCount);sprintf(t_szMsg,("签发数次:%s"), idInfo.signCount) ;ui->textEdit->append(t_szMsg) ;}}

读社保卡接口

void MainWindow::on_btnSSCard_clicked()
{
    if(m_isOpen == false)
    {
        ui->textEdit->append("读卡器端口未打开") ;
        return  ;
    }

    char t_szMsg[256] = "" ;
    SSCard_IDINFO cardInfo;
    memset(&cardInfo, 0, sizeof(cardInfo));
    char pszError[256] = "" ;

    long t_nRead = fpDonsee_ReadSSCard(0x11, &cardInfo, pszError);
    if (t_nRead != 0)
    {
        printf("读社保卡失败,MSG:%s\n", pszError);
        sprintf(t_szMsg,"读社保卡失败,MSG:%s", pszError) ;
        ui->textEdit->append(t_szMsg) ;
        return ;
    }
    else
    {
        QString t_strTemp1 , t_strTemp2 ;

        printf("读社保卡成功\n");
        ui->textEdit->append("读社保卡成功") ;

        t_strTemp1 = "姓名:" ;
        t_strTemp2 = GBKtoUtf8(cardInfo.name) ;
        ui->textEdit->append(t_strTemp1 + t_strTemp2) ;

        t_strTemp1 = "性别:" ;
        t_strTemp2 = GBKtoUtf8(cardInfo.sex) ;
        ui->textEdit->append(t_strTemp1 + t_strTemp2) ;

        t_strTemp1 = "民族:" ;
        t_strTemp2 = GBKtoUtf8(cardInfo.nation) ;
        ui->textEdit->append(t_strTemp1 + t_strTemp2) ;


        printf("出生日期:%s\n", cardInfo.birthday);
        sprintf(t_szMsg,"出生日期:%s", cardInfo.birthday) ;
        ui->textEdit->append(t_szMsg) ;

        printf("发证日期:%s\n", cardInfo.signdate);
        sprintf(t_szMsg,"发证日期:%s", cardInfo.signdate) ;
        ui->textEdit->append(t_szMsg) ;

        printf("有效日期:%s\n", cardInfo.validterm);
        sprintf(t_szMsg,"有效日期:%s", cardInfo.validterm) ;
        ui->textEdit->append(t_szMsg) ;

        printf("卡号:%s\n", cardInfo.cardnumber);
        sprintf(t_szMsg,"卡号:%s", cardInfo.cardnumber) ;
        ui->textEdit->append(t_szMsg) ;

        printf("社会保障号码(身份证号):%s\n", cardInfo.idnumber);
        sprintf(t_szMsg,"社会保障号码(身份证号):%s", cardInfo.idnumber) ;
        ui->textEdit->append(t_szMsg) ;

        printf("城市代码:%s\n", cardInfo.city);
        sprintf(t_szMsg,"城市代码:%s", cardInfo.city) ;
        ui->textEdit->append(t_szMsg) ;

        printf("社保卡版本:%s\n", cardInfo.cardveVrsion);
        sprintf(t_szMsg,"社保卡版本:%s", cardInfo.cardveVrsion    ) ;
        ui->textEdit->append(t_szMsg) ;
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2661650.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

流媒体服务器ZLMediaKit与FFmpeg

流媒体服务器ZLMediaKit与FFmpeg overview 关键字:ZLMediaKit、FFmpeg、srt、vlc 如果想快速拥有自己的流媒体服务器,那么可以使用开源项目自己搭建。开源的流媒体服务器,在国内,GitHub star数量比较高的:srs和ZLMe…

2024年12个Stonly知识库替代方案

知识库软件在现代企业中发挥着重要的作用,它提供了一个专门的工具,用于创建、管理和维护集中的信息库。面对组织需要处理的大量信息,选择合适的知识库平台可能也是一项比较困难的任务。 知识库一个关键的区别在于内部和外部知识库。内部知识…

C++ BuilderXE10 关于Intraweb关于IWTemplateProcessorHTML1操作

1、端口设置,port参数修改端口号。 2、初始化设置成ciMultiThreaded。这样可以避免ADO组件的加载错误。 3、IWTemplateProcessorHTML1设置, IWForm1->LayoutMgr IWTemplateProcessorHTML1;//关联模板(IWForm1. html) IWTemplateProcessorHTML1->RenderStyles…

交叉编译含义

交叉编译是在一个平台上生成另一个平台上的可执行代码。同一个体系结构可以运行不同的操作系统;同样,同一个操作系统也可以在不同的体系结构上运行。 编译工具链下载: (1) ARM提供:Arm GNU Toolchain Downloads – Arm Develope…

实现QT的多语言切换(静态+动态)

背景: 1.项目开发上:多人多模块同时开发,需要考虑如何便于管理共同开发 2.文本有两类:界面上固定不变的文本(静态);在程序运行时才能获得的文本(动态) 任务&#xff1a…

【C++】vector 基本使用(详解)

目录 一,vector 的介绍 二,vector 的定义 1,vector() 2,vector(size_type n, const value_type& val value_type()) 3,vector (const vector& x) 4,vector (InputIte…

使用 sourcetree 的《遴选》功能

假设你有一个分支,有两个提交 A,和B,你现在想在A提交的基础上把 B提交的功能做修改,你可以使用 遴选功能。 在A 提交的基础上新建一个分支,然后在B提交上面,右键,选择 遴选,那么B修改…

传感器原理与应用复习--磁电式与霍尔传感器

文章目录 上一篇磁电感应传感器工作原理应用 霍尔传感器工作原理基本特性应用 下一篇 上一篇 传感器原理与应用复习–电容式与压电式传感器 磁电感应传感器 工作原理 导体在稳恒均匀磁场中,沿垂直磁场方向运动时,产生的感应电势为 e B l v e Blv …

Mediapipe绘制实时3d铰接骨架图——Mediapipe实时姿态估计

一、前言 大约两年前,基于自己的理解我曾写了几篇关于Mediapipe的文章,似乎帮助到了一些人。这两年,忙于比赛、实习、毕业、工作和考研。上篇文章已经是一年多前发的了。这段时间收到很多私信和评论,请原谅无法一一回复了。我将尝…

7+WGCNA+机器学习+泛癌生信思路,非肿瘤也能结合泛癌分析

今天给同学们分享一篇生信文章“Analysis and Experimental Validation of Rheumatoid Arthritis Innate Immunity Gene CYFIP2 and Pan-Cancer”,这篇文章发表在Front Immunol期刊上,影响因子为7.3。 结果解读: DEG筛选和数据预处理 数据在…

Baumer工业相机堡盟相机如何使用NEOAPI SDK实现相机的连接(C++)

Baumer工业相机堡盟相机如何使用NEOAPI SDK实现相机的连接(C) Baumer工业相机Baumer工业相机SDK技术背景代码分析第一步:先使用NEOAPI函数查找相机第二步:连接相机后对相机进行采图第三步:将采集的图像显示在UI界面上 …

BUG-由浏览器缩放引起PC端显示手机端视图

文章目录 来源解决 来源 启动Vue项目,用浏览器打开显示手机端视图,从vscode直接ctrl链接打开正常显示。 检查-未开启仿真,但仍显示错误。 解决 浏览器缩放问题。 修改为100%

【UE5.1】程序化生成Nanite植被

目录 效果 步骤 一、下载Gaea软件和树林资产 二、使用Gaea生成贴图 三、 生成地形 四、生成草地 五、生成树林 六、生成湖泊 七、其它功能介绍 7.1 调整树林生成的面积 7.2 让植物随风飘动 7.3 玩家和植物互动 7.4 雪中树林 7.5 环境音效 效果 步骤 一、下载Ga…

Android 13 默认关闭 快速打开相机

介绍 在设置菜单的手势界面里,快速打开相机是默认开启的,此功能当开启时连续点击两次电源键会打开相机,现在客户需要默认关闭。 效果展示 修改 这里一开始想到的就是配置文件,在路径下果然找到了,从注释中看使我们需要的&#x…

CTF-Crypto练习

技能兴鲁初赛 from gmpy2 import * from Crypto.Util.number import *flag flag{I\m not gonna tell you the FLAG} # 这个肯定不是FLAG了,不要交这个咯p getPrime(2048) q getPrime(2048) m1 bytes_to_long(bytes(flag.encode()))e1 3247473589 e2 3698409…

【验证概括 SV的数据类型_2023.12.18】

验证概括 验证的过程是保证芯片实现符合规格说明书(Specification,spec)的过程 验证的两项任务: RTL sim:前仿真,验证功能 GLS-Gate (Level Simulation):后仿真,验证功能和时序 验…

【小白专用】C# 压缩文件 ICSharpCode.SharpZipLib.dll效果:

插件描述: ICSharpCode.SharpZipLib.dll 是一个完全由c#编写的Zip, GZip、Tar 、 BZip2 类库,可以方便地支持这几种格式的压缩解压缩, SharpZipLib 的许可是经过修改的GPL,底线是允许用在不开源商业软件中,意思就是免费使用。具体可访问ICSha…

svg学习

概念 svg 可缩放矢量图形 svg 使用xml格式定义图像 svg 形状 矩形 <rect> <?xml version"1.0" standalone"no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd&q…

polar CTF上传

WEB-上传 一、查看题目信息 二、漏洞分析 经过上传测试发现&#xff0c;这题过滤掉了<?&#xff0c;这样正常的一句话木马就没法上传&#xff0c;这里可以用utf-16编码绕过。因为utf-16占utf-8的两倍长度&#xff0c;上传时默认检测为utf-8,从而就能绕过检测成功上传。 同…

Paper Survey——NeRF SLAM

NeRF SLAM&#xff08;Neural Radiance Fields Simultaneous Localization and Mapping&#xff09;是一种结合神经辐射场&#xff08;NeRF&#xff09;和SLAM&#xff08;Simultaneous Localization and Mapping&#xff09;的先进技术&#xff0c;用于实时地构建三维环境地图…