VUE实现华视身份证阅读器读取身份证信息(本文分两种情况,第一中是点击按钮读取信息,一种是自动读取信息)

article/2025/9/27 8:30:00

本文是用了vue+element来实现华视身份证读卡器读取身份信息的,当然在开发之前要做好前提准备,就是厂家提供对应设备的api和安装对应的驱动。本文通过两种方法来实现读取信息,第一种是点击按钮读取信息,第二种是卡片放上去会自动读取信息。

  1. 点击按钮读取信息:
<template><div><el-button type="success" @click="readIDCard">读取身份证</el-button><el-dialog title="读取身份证信息" :visible.sync="showDialog" width="500px" append-to-body :before-close="closeDialog"><el-form :model="IDCardForm" ref="IDCardForm" :rules="rules" label-width="150px"><el-form-item label="姓名:" prop="name"><el-input v-model="IDCardForm.name" placeholder="请输入姓名"></el-input></el-form-item><el-form-item label="证件号码:" prop="idCardNumber"><el-input v-model="IDCardForm.idCardNumber" placeholder="请输入证件号码"></el-input></el-form-item><el-form-item label="性别:" prop="sex"><el-input v-model="IDCardForm.sex" placeholder="请输入性别"></el-input></el-form-item><el-form-item label="身份证照片:" prop="sfzImage"><img v-if="IDCardForm.sfzImage==null" src="../../../dist/img/img.146655c9.jpg" height="100px" width="100px" /><img v-else :src="IDCardForm.sfzImage" height="100px" width="100px" /></el-form-item><el-form-item label="民族:" prop="nation"><el-input v-model="IDCardForm.nation" placeholder="请输入民族"></el-input></el-form-item><el-form-item label="出生日期:" prop="birthday"><el-input v-model="IDCardForm.birthday" placeholder="请输入出生日期"></el-input></el-form-item><el-form-item label="身份证有效起日期:" prop="sfzyxqrq"><el-input v-model="IDCardForm.sfzyxqrq" placeholder="请输入身份证有效起日期"></el-input></el-form-item><el-form-item label="身份证有效起日期:" prop="sfzyxzrq"><el-input v-model="IDCardForm.sfzyxzrq" placeholder="请输入身份证有效起日期"></el-input></el-form-item><!--检测是否装有插件--><object id="CertCtl" ref="CertCtl" type="application/cert-reader" width="0" height="0"><p style="color:#FF0000;">控件未安装或不可用,请检查安装后在使用!</p></object></el-form><el-row :gutter="20" class="mb8"><el-col :span="8"><el-button type="success" icon="el-icon-plus" size="mini" @click="connect">连接</el-button></el-col><el-col :span="8"><el-button type="warning" icon="el-icon-download" size="mini" @click="readCert">读卡</el-button></el-col><el-col :span="8"><el-button type="danger" icon="el-icon-delete" size="mini" @click="disconnect()">断开</el-button></el-col></el-row><div slot="footer" class="dialog-footer"><el-button type="primary" @click="submitForm">确 定</el-button><el-button @click="showDialog=false">取 消</el-button></div></el-dialog></div>
</template><script>export default {data() {return {// 对话框的显隐showDialog: false,CertCtl: '',// 查询参数IDCardForm: {name: "", // 姓名idCardNumber: "", // 身份证号码sex: "", // 性别nation: "", // 民族birthday: "", // 出生日期sfzyxqrq: "", //身份证有效起日期sfzyxzrq: "", // 身份证有效止日期sfzImage: null // 身份证照片},// 表单参数// IDCardForm: {},rules: {}}},methods: {// 重置表单reset() {this.IDCardForm = {name: "", // 姓名idCardNumber: "", // 身份证号码sex: "", // 性别nation: "", // 民族birthday: "", // 出生日期sfzyxqrq: "", //身份证有效起日期sfzyxzrq: "", // 身份证有效止日期sfzImage: null // 身份证照片}// this.resetForm("IDCardForm")},// 读取身份证按钮readIDCard() {this.showDialog = true},// 对话框的右上角那个叉叉closeDialog() {this.showDialog = false},// 对话框的确定按钮submitForm() {this.showDialog = false},// 连接读卡器connect() {this.reset();try {const result = CertCtl.connect();let resultObj = JSON.parse(result);this.IDCardForm.sfzImage = nullconsole.log("1111", resultObj);// 判断状态是否连接成功if (resultObj.resultFlag == "0") {this.$message.warning("连接成功")}} catch (e) {}},// 读卡readCert() {this.reset()const result = CertCtl.readCert();let resultObj = JSON.parse(result);console.log("2222", resultObj);this.IDCardForm.name = resultObj.resultContent.partyName;this.IDCardForm.idCardNumber = resultObj.resultContent.certNumber;this.IDCardForm.sex = resultObj.resultContent.gender;this.IDCardForm.nation = resultObj.resultContent.nation;this.IDCardForm.birthday = resultObj.resultContent.bornDay;this.IDCardForm.sfzyxqrq = resultObj.resultContent.effDate;this.IDCardForm.sfzyxzrq = resultObj.resultContent.expDate;this.IDCardForm.sfzImage = "data:image/jpeg;base64," + resultObj.resultContent.identityPic;},// 断开连接disconnect() {// this.reset();try {const result = CertCtl.disconnect();let resultObj = JSON.parse(result);this.IDCardForm.sfzImage = null;console.log("3333", resultObj);if (resultObj.resultFlag == "1") {this.$message.warning("连接已断开")}} catch (e) {}}},}
</script><style>
</style>

实现的效果图是:在这里插入图片描述
点击读取身份证,会出现一个弹框,然后先点击连接,会提示连接成功,再点击读卡,就会把身份证信息给显示再里面的输入框中,最后点击断开,则会断开连接,下次进来还得要点击连接才行,如果不点断开的话,下次进来可以直接点击读卡。这是点击按钮读卡的。
2. 自动读取信息的(代码如下)

<template><div><el-button type="success" @click="readIDCard">自动读取身份证</el-button><el-dialog title="读取身份证信息" :visible.sync="showDialog" width="500px" append-to-body :before-close="closeDialog"><el-form :model="IDCardForm" ref="IDCardForm" :rules="rules" label-width="150px"><el-form-item label="姓名:" prop="name"><el-input v-model="IDCardForm.name" placeholder="请输入姓名"></el-input></el-form-item><el-form-item label="证件号码:" prop="idCardNumber"><el-input v-model="IDCardForm.idCardNumber" placeholder="请输入证件号码"></el-input></el-form-item><el-form-item label="性别:" prop="sex"><el-input v-model="IDCardForm.sex" placeholder="请输入性别"></el-input></el-form-item><el-form-item label="身份证照片:" prop="sfzImage"><img v-if="IDCardForm.sfzImage==null" src="../../../dist/img/img.146655c9.jpg" height="100px" width="100px" /><img v-else :src="IDCardForm.sfzImage" height="100px" width="100px" /></el-form-item><el-form-item label="民族:" prop="nation"><el-input v-model="IDCardForm.nation" placeholder="请输入民族"></el-input></el-form-item><el-form-item label="出生日期:" prop="birthday"><el-input v-model="IDCardForm.birthday" placeholder="请输入出生日期"></el-input></el-form-item><el-form-item label="身份证有效起日期:" prop="sfzyxqrq"><el-input v-model="IDCardForm.sfzyxqrq" placeholder="请输入身份证有效起日期"></el-input></el-form-item><el-form-item label="身份证有效起日期:" prop="sfzyxzrq"><el-input v-model="IDCardForm.sfzyxzrq" placeholder="请输入身份证有效起日期"></el-input></el-form-item><!--检测是否装有插件--><object id="CertCtl" ref="CertCtl" type="application/cert-reader" width="0" height="0"><p style="color:#FF0000;">控件未安装或不可用,请检查安装后在使用!</p></object></el-form><el-row :gutter="20" class="mb8"><el-col :span="8"><el-button type="success" icon="el-icon-plus" size="mini" @click="connect">连接</el-button></el-col><!-- <el-col :span="8"><el-button type="warning" icon="el-icon-download" size="mini" @click="readCert">读卡</el-button></el-col> --><el-col :span="8"><el-button type="danger" icon="el-icon-delete" size="mini" @click="disconnect()">断开</el-button></el-col></el-row><div slot="footer" class="dialog-footer"><el-button type="primary" @click="submitForm">确 定</el-button><el-button @click="cancelForm">取 消</el-button></div></el-dialog></div>
</template><script>export default {data() {return {// 对话框的显隐showDialog: false,CertCtl: '',// 查询参数IDCardForm: {name: "", // 姓名idCardNumber: "", // 身份证号码sex: "", // 性别nation: "", // 民族birthday: "", // 出生日期sfzyxqrq: "", //身份证有效起日期sfzyxzrq: "", // 身份证有效止日期sfzImage: null // 身份证照片},// 表单参数// IDCardForm: {},rules: {},timer: ""}},methods: {// 重置表单reset() {this.IDCardForm = {name: "", // 姓名idCardNumber: "", // 身份证号码sex: "", // 性别nation: "", // 民族birthday: "", // 出生日期sfzyxqrq: "", //身份证有效起日期sfzyxzrq: "", // 身份证有效止日期sfzImage: null // 身份证照片}// this.resetForm("IDCardForm")},// 读取身份证按钮readIDCard() {this.showDialog = true},// 对话框的右上角那个叉叉closeDialog() {this.showDialog = false;clearInterval(this.timer)},// 对话框的确定按钮submitForm() {this.showDialog = false},// 对话框的取消按钮cancelForm() {this.showDialog = false;// 清除定时器clearInterval(this.timer);},// 连接读卡器connect() {this.reset();try {const result = CertCtl.connect();let resultObj = JSON.parse(result);this.IDCardForm.sfzImage = null// 判断状态是否连接成功if (resultObj.resultFlag == "0") {this.$message.warning("连接成功")}} catch (e) {}// 设置定时器 每三秒调用一次方法,就是每三秒读卡读取一次this.timer = setInterval(this.readCertAuto, 3000);},// 读卡readCertAuto() {this.reset()const result = CertCtl.readCert();let resultObj = JSON.parse(result);console.log("2222", resultObj);this.IDCardForm.name = resultObj.resultContent.partyName;this.IDCardForm.idCardNumber = resultObj.resultContent.certNumber;this.IDCardForm.sex = resultObj.resultContent.gender;this.IDCardForm.nation = resultObj.resultContent.nation;this.IDCardForm.birthday = resultObj.resultContent.bornDay;this.IDCardForm.sfzyxqrq = resultObj.resultContent.effDate;this.IDCardForm.sfzyxzrq = resultObj.resultContent.expDate;this.IDCardForm.sfzImage = "data:image/jpeg;base64," + resultObj.resultContent.identityPic;},// 断开连接disconnect() {// this.reset();try {const result = CertCtl.disconnect();let resultObj = JSON.parse(result);this.IDCardForm.sfzImage = null;if (resultObj.resultFlag == "1") {this.$message.warning("连接已断开")}clearInterval(this.timer);} catch (e) {}}},destroyed() {clearInterval(this.timer)}}
</script><style>
</style>

显示的效果如图所示
在这里插入图片描述
点击连接之后,会提示连接成功,然后你把卡片放上去,里面的输入框就会显示出身份信息,拿出来之后信息会没掉,但是你如果再次把卡放在读卡器上面,则信息还会显示出来,但是我这边代码是没用把内容清空,你们可以自己加上去,如果断开就清空表单。这个按照个人意愿来。
自动读取身份信息我是通过设置一个定时器,每隔3秒会读取一次,如果一直没放上去卡片的话,也会一直再读取信息,但是再控制台里面会一直报错就是了,毕竟你没放卡片上去。

以上就是我对VUE+element实现华视身份证阅读器读取身份证信息的理解和代码内容,如果哪里写的不好或者说的不好,望各位谅解和指点。
本文也是参考了一位大佬的代码而做出的其他的补充,这位大佬代码在这,[参考的代码内容](https://blog.csdn.net/weixin_43912548/article/details/107187352)在这位这里还有华视身份证阅读器的api和接口说明文件。

http://chatgpt.dhexx.cn/article/hVZ7kxyN.shtml

相关文章

身份证读取设备开发解决方案:2、Android下通过usb转串口读取身份证信息

身份证读取设备开发解决方案&#xff1a;2、Android下通过usb转串口读取身份证信息 文章目录 身份证读取设备开发解决方案&#xff1a;2、Android下通过usb转串口读取身份证信息1. 前言2. 准备3. android下读取身份证信息的demo3.1 部分源码3.2 碎片代码3.3 结果展示3.4 注意点…

自动化神器!Python 批量读取身份证信息写入 Excel

今天分享一个实用技能&#xff0c;利用 Python 批量读取身份证信息写入 Excel。 读取 以图片形式的身份证为例&#xff0c;信息读取我们使用百度文字识别OCR来实现&#xff0c;百度接口提供了免费额度&#xff0c;日常使用基本差不多够了&#xff0c;下面来具体看一下如何使用…

浏览器使用华视电子设备读取身份证信息

项目中用到了使用华视电子CVR-100U、CVR-100D设备读取身份证的设备在浏览器上读取身份证信息&#xff0c;在浏览器使用时&#xff0c;需要安装浏览器的运行的插件&#xff0c;否则设备不好用。 sdk下载方式在文章最后 此控件支持IE、360浏览器、360极速浏览器等浏览器 暂不支持…

身份证读取设备开发解决方案:3、单片机读取身份证信息的demo

身份证读取设备开发解决方案&#xff1a;3、单片机读取身份证信息的demo 文章目录 身份证读取设备开发解决方案&#xff1a;3、单片机读取身份证信息的demo一、前言二、部分代码及结果展示1. 准备2. 部分代码3. 结果展示 三、常见错误错误1错误2 四、注意事项1. 确认串口线焊接…

身份证阅读器读卡器React网页方法实现身份证的读取

支持产品型号东信EST-100GS谷歌版本身份证读卡器USB免驱接口&#xff0c;支持谷歌火狐360 IE 遨游 搜狗 等等多种web浏览器使用。 官方网址&#xff1a;www.eastcoms.com 以下为React源码示例&#xff1a; import React, {PureComponent} from react; import "./agreemen…

身份证读取

在找读取身份证动态库&#xff08;dll&#xff09; 文件时&#xff0c;发现这么一篇好文章&#xff0c;有兴趣学习一下&#xff01; ---------------- 这份代码&#xff0c;主要是根据api文档来写的&#xff0c;文档上提供了各个方法的使用说明&#xff0c;并且有一个示例代码。…

身份证读取设备开发解决方案:1、Windows下开发Qt程序demo读取身份证信息

身份证读取设备开发解决方案&#xff1a;1、Windows下开发Qt程序demo读取身份证信息 文章目录 身份证读取设备开发解决方案&#xff1a;1、Windows下开发Qt程序demo读取身份证信息1. 前言2. 身份证读取模块3. Qt5开发简单上位机读取身份证信息1. 注意的点2. 部分源码3. 结果展示…

最新web/java/jsp实现发送手机短信验证码和邮箱验证码的注册登录功能(详细)

最新web/java/jsp实现发送手机短信验证码和邮箱验证码的注册登录功能&#xff08;详细&#xff09; 最近几天有人需要帮忙做一个关于发送验证码的功能&#xff0c;之前没有做过&#xff0c;于是我鼓捣一阵子&#xff0c;记录一下关于web项目中注册登录常用的手机验证码和邮箱验…

uniapp中注册手机号短信验证码

一、效果图 二、输入手机号页面 <template><view><view classlogin-tel><view classtel-main><view classlogin-from><view classlogin-user><text classuser-text>手机号</text><input type"number" focustrue…

阿里云手机验证码注册(可以使用阿里云提供的测试模板,不用个人申请)

目录 打开阿里云&#xff1a;&#xff08;绑定手机号码&#xff09;&#xff0c;不用申请模板和签名手机验证码注册流程&#xff1a;实现流程创建springboot工程&#xff0c;添加依赖编写applicatioin配置文件编写controller&#xff0c;根据手机号发送短信编写service&#xf…

抖音实战~手机号验证码一键注册登录流程(限制手机终端登录)

文章目录 一、手机号验证码二、前端2.1. 点击登陆流程2.2. 点击登录源码 三、后端登录3.1. 登录流程图3.2. 流程简述3.3. 手机号验证码登录流程 一、手机号验证码 二、前端 2.1. 点击登陆流程 1.先校验手机号是否合法&#xff1f;不合法&#xff0c;则提示“请输入正确的手机…

会话——验证码注册与记住密码登录

文章目录 1、需求分析2、用户登录功能2.1、流程分析2.2、代码实现2.3、结果演示 3、登录记住密码功能3.1、流程分析3.2、代码实现3.3、结果演示 4、用户注册功能4.1、流程分析4.2、代码实现4.3、结果演示 5、注册验证码功能5.1、流程分析5.2、代码实现5.3、结果演示 1、需求分析…

关于烧写ESP8285核心板的相关事项

首先需要一个CH340的usb 转ttl 板子 然后连接到8285 脚管对应 TTL ---- 8285 VCC----VCC RXD----TX0 TXD----RX0 GND----GND 在通电之前先要把8285的GND 和io 0 连在ttl 板子的 GND上 烧写软件要设置正确否则无法启动

esp32 esp8285 wf6000OTA升级小记

近期做了3个IOT芯片的OTA升级&#xff0c;记录下&#xff1a; 最开始做完的是ESP32,升级流程也简单&#xff0c;初始烧录到固定区&#xff0c;然后OTA升级就会在user1,user2两个区内来回升&#xff0c;升级的文件是同一个&#xff08;即同一个文件&#xff0c;先升级就是user1…

Ubuntu18.04 上 ESP8285 的 esp-at release_v2.2.0.0 编译环境搭建

1 环境搭建前提 1.1 安装编译 ESP-IDF 需要的软件包&#xff1a; sudo apt-get install git wget flex bison gperf python3 python3-pip python3-setuptools cmake ninja-build ccache libffi-dev libssl-dev dfu-util1.2 安装 Python 3.8 sudo apt-get install python3.8-…

探索ESP8285(3)通过EMQX服务器点亮一个LED灯

CCC_122&#xff1a;博客只用于学习交流&#xff0c;不涉及任何商业用途&#xff0c;如果有错误之处&#xff0c;欢迎指正。 在上一个博客的基础上 探索ESP8285&#xff08;2&#xff09;搭建Windows版MQTT服务器 我们来通过EMQX服务器点亮ESP8285模块上的LED灯。 首先查得E…

乐鑫esp8266学习rtos3.0笔记第10篇:内置仅1M的Esp8285,如何攻破最棘手的OTA问题,大大节省资源成本开发产品;

本系列博客学习由非官方人员 半颗心脏 潜心所力所写&#xff0c;仅仅做个人技术交流分享&#xff0c;不做任何商业用途。如有不对之处&#xff0c;请留言&#xff0c;本人及时更改。 1、 Esp8266之 搭建开发环境&#xff0c;开始一个“hellow world”串口打印。 2、 Esp8266之…

晶科鑫 | 国产26MHz晶振匹配Espressif(乐鑫) ESP8285/ESP8266芯片案例

【应用】国产26MHz频率晶振应用于物联网WIFI物联网模块&#xff08;串口转WiFi模块&#xff09;&#xff0c;Espressif(乐鑫) ESP8285/ESP8266芯片匹配测试OK ESP8285其实是ESP8266的升级版本&#xff0c;两者可以共用同一套SDK&#xff0c;只是ESP8285内部集成了1MB Flash&…

ESP8285烧写问题备忘

1 问题现象 ESP8285 烧写了固件&#xff0c;怎么都跑不起来&#xff0c;串口打印如下信息&#xff1a; ets Jan 8 2013,rst cause:2, boot mode:(3,7)load 0x4010f000, len 1384, room 16 tail 8 chksum 0xef csum 0xef csum err ets_main.c 2 问题原因 上乐鑫官网查了 ESP…

ESP8285 多个bin文件合并烧录

可通过两种方式烧录固件&#xff0c;一种是基于esp-idf开发时&#xff0c;中命令终端执行make flash命令烧录&#xff1b;二是使用ESPFlashDownloadTool工具。 bin文件说明 ESP8285/ESP8266的固件一般包含4个bin文件。 查看各bin文件的路径 以带OTA的固件为例&#xff0c;在…