Uniapp插件如何通过NFC读取多种证卡信息?
nfc读卡uniapp插件,由中软高科进行开发,主要是通过NFC读取居民身份证、港澳台居住证、外国人居住证、护照等证卡的信息。经过多个版本的升级更新,目前性能已趋于稳定,并且读卡速度较之最初版本有了大的提升。
注意事项
测试使用的 appid 不可用于商用(否则后果自负)。
商用的 appid 请务必联系我司商务进行分配。
uniapp使用原生插件示例
1、加载插件
NFC身份证件读取——插件市场链接
// 获取 读证件的 插件
var readCardModule = uni.requireNativePlugin("CSHT-ReadCard");
2、参数设置
// 参数配置var config = {'openSound': true, // 蜂鸣器开关'openLog': true, // 日志保存开关'readType': 2, // 1: USB 2: NFC 3:串口读卡 5:Sam离线读卡 9:NFC电子护照 'appId': "123", // 'timeout': 20000, // 读卡超时时间 单位毫秒,最小值为 5000'openLocalCache': true, // 本地缓存开启'isNeedIdCardPhoto': false, // 解码身份证时,是否需要生成身份证正反面照片(不需要时不要开,以免影响速度)'isPassportPhoto': true, // 解码护照时,是否需要读取芯片里的高清人脸照(读取照片时间较长。可由外部OCR提取人脸照,速度快)'ipAndPort': [{ // 解码服务器地址,可配置多个服务器节点。第一个为主节点,其余为备用节点。'ip': 'yfs4.sfzydq.com','port': 9999}, {'ip': 'yjm2.sfzydq.com','port': 9999}]};// readType设置成 3,串口读卡时,必须设置 串口文件地址、波特率 两个参数。(不需要时,可删除)config.deviceFilePath = "/dev/ttyS0";config.baudrate = 115200;// readType设置成 9,读取护照时,必须添加 护照号、生日、有效期 三个参数。 (不需要时,可删除)config.documentNumberStr = "E90342672"; // 9位护照号码config.dateOfBirthStr = "940521"; // 出生日期,格式为 YYMMDDconfig.dateOfExpiryStr = "261113"; // 有效日期,格式为 YYMMDDreadCardModule.setReadCardConfig(config, (ret) => {var status = ret.status; var msg = ret.msg; // 状态信息this.$data.status = 'status: ' + status + ' msg: ' + msg;if(status){// 参数设置成功,初始化读卡this.readCardInit();}});
3、初始化读卡
readCardInit() {readCardModule.readCardInit((ret) => {if(ret.type == "InitState"){ // 初始化状态信息回调var code = ret.code; // 状态码 参照文档状态码说明var msg = ret.msg; // 状态信息this.$data.status = 'code: ' + code + ' msg: ' + msg;this.$data.initSuccess = code == 1001;}});}
4、初始化成功后,即可开启读卡
// 跳转原生NFC界面,开始读卡
readCardModule.startReadCard((ret) => {switch (ret.type) {case "ReadCardState": // 读卡状态信息回调var code = ret.code; // 状态码 参照文档状态码说明var msg = ret.msg; // 状态信息this.$data.status = 'code: ' + code + ' msg: ' + msg;switch (code) {case 1023: // 读卡解码中case 1024: // 开始寻卡uni.showLoading({title: '读卡中...',mask: true});break;case 1000: // 读卡成功uni.hideLoading();break;case 1022: // 读卡失败uni.hideLoading();break;}break;case "ReadICCardSuccess": // 读其他卡成功this.$data.dataJson = 'cardType: ' + ret.cardType + '\ncardNumber: ' + ret.icNumber;this.$data.headImage = null;break;case "ReadIDCardSuccess": // 读身份证成功var data = ret.idCardData;this.$data.headImage = ret.base64Image;if (data.type == 1081||data.type == 1083) { // 外国人永居证this.$data.dataJson ='中文姓名: ' + data.nameChinese +'\n英文姓名: ' + data.nameEnglish +'\n性别: ' + data.sex +'\n生日: ' + data.birthday +'\n国籍: ' + data.nationlity +'\n证件号码: ' + data.id +'\n有效期限: ' + data.startDate + '-' + data.endDate;} else if (data.type == 1082) { // 港澳台居住证//this.$data.dataJson ='姓名: ' + data.name +'\n性别: ' + data.sex +'\n生日: ' + data.birthday +'\n住址: ' + data.address +'\n证件号码: ' + data.id +'\n签发机关: ' + data.issue +'\n有效期限: ' + data.startDate + '-' + data.endDate;} else {// 中国居民身份证this.$data.dataJson ='姓名: ' + data.name +'\n性别: ' + data.sex +'\n民族: ' + data.nation +'\n生日: ' + data.birthday +'\n住址: ' + data.address +'\n证件号码: ' + data.id +'\n签发机关: ' + data.issue +'\n有效期限: ' + data.startDate + '-' + data.endDate;} break;case "ReadPassportSuccess": // 读护照成功this.$data.headImage = ret.base64Image;var data = ret.idCardData;this.$data.dataJson ='姓名: ' + data.nameOfHolder + '/' + data.primaryIdentifier + data.secondaryIdentifier +'\n性别: ' + data.gender +'\n生日: ' + data.dateOfBirth +'\n国家码: ' + data.nationality +'\n护照号码: ' + data.documentNumber +'\n有效期: ' + data.dateOfExpiry;break;default:break;}});
手动停止读卡
正常读卡时,不需要手动去停止,读卡结束后,会自动处理停止。
stopReadCard(){readCardModule.stopReadCard();
}
附录
身份证详细信息
字段 | 类型 | 注释 |
---|---|---|
type | int | 1080:中国居民身份证 1082:港澳台居住证 |
address | string | 家庭住址 |
birthday | string | 出生日期 |
dn | string | dn码 |
endDate | string | 身份证结束时间 |
startDate | string | 身份证生效时间 |
id | string | 身份证号码 |
issue | string | 签发机关 |
name | string | 姓名 |
nation | string | 民族 |
sex | string | 性别 |
uuid | string | uuid |
base64Image | String | base64照片 |
外国人永久居住证
字段 | 类型 | 注释 |
---|---|---|
type | int | 1081:外国人永久居住证 |
birthday | string | 出生日期 |
dn | string | dn码 |
endDate | string | 身份证结束时间 |
startDate | string | 身份证生效时间 |
id | string | 身份证号码 |
issue | string | 签发机关 |
sex | string | 性别 |
uuid | string | uuid |
base64Image | string | base64照片 |
nameChinese | string | 中文姓名 |
nameEnglish | string | 英文姓名 |
nameEnglishAdd | string | 英文附加姓名 |
nationlity | string | 国籍 |
cardVersion | string | 卡版本号 |
cardType | string | 卡类型 |
historicalNumber | string | 历史号码 |
renewalNumber | string | 续签数 |
电子护照详细信息
字段 | 类型 | 注释 |
---|---|---|
nameOfHolder | string | 中文姓名 |
primaryIdentifier | string | 姓 |
secondaryIdentifier | string | 名 |
gender | string | 性别 M男 F女 |
dateOfBirth | string | 生日 |
nationality | string | 国家码 |
dateOfExpiry | string | 有效期 |
documentNumber | string | 护照号码 |
duration | long | 解码时长 |
base64Image | String | base64照片 |
状态码对应表
READCARD_SUCCESS(1000, "解码成功"),ININ_OK(1001, "初始化成功"),ININ_FAILE(1002, "初始化失败"),USB_NODEVICE_CODE(1003, "未发现读卡设备,请检查usb连接"),USB_NOREADCARD_CODE(1004, "没有检测到读卡设备"),USB_SYSYTEMREEOE_CODE(1005, "系统usb异常,请检查usb连接"),USB_NOINTERFACE_CODE(1006, "usb没有建立连接"),USB_NOCHANNLE_CODE(1007, "usb通道打开失败"),USB_NOSERVICE_CODE(1008, "没有usb服务"),SOCKET_SYS_CODE(1010, "网络通讯异常"),LOCAL_DATA_ERROR(1018, "本地通信失败"),UNKONW_ERROR(1020, "未知异常"),READCARD_START(1021, "解码开始"),READCARD_FAILE(1022, "解码失败"),READCARD_READING(1023, "解码中"),FIND_CARD_START(1024, "开始寻卡"),FIND_CARD_FAIL(1025, "寻卡失败"),FIND_CARD_SUCCESS(1026, "寻卡成功"),READ_UID_FAILE(1031, "UID异常"),SERIALPORT_NOINTERFACE_CODE(1036, "串口异常,请检查设备"),SERIALPORT_DATA_ERROR(1038, "串口异常"),
卡类型
CARD_IC(1040, "IC卡"),CARD_M1(1041, "M1卡"),CARD_LCT_STUDENT(1051, "绿城通学生卡"),CARD_LCT_NORMAL(1052, "绿城通普通卡"),CARD_LCT_OLD(1053, "绿城通老年卡"),CARD_SB(1060, "社保卡"),CARD_CMCC_SIM(1070, "中国移动超级SIM卡"),CARD_CUCC_SIM(1071, "中国联通超级SIM卡"),CARD_CTCC_SIM(1072, "中国电信超级SIM卡"),CARD_IDCARD(1080, "中国居民身份证"),CARD_IDCARD_FOREIGN(1081, "外国永久居住证"),CARD_IDCARD_GAT(1082, "港澳台居住证")
相关文章:
Uniapp插件如何通过NFC读取多种证卡信息?
nfc读卡uniapp插件,由中软高科进行开发,主要是通过NFC读取居民身份证、港澳台居住证、外国人居住证、护照等证卡的信息。经过多个版本的升级更新,目前性能已趋于稳定,并且读卡速度较之最初版本有了大的提升。 注意事项 测试使用的…...
米哈游C++开发精选60道面试题及参考答案
C++ 面向对象的三个特征 封装是把数据和操作数据的函数捆绑在一起,并且对数据的访问进行限制。这样做的好处是可以隐藏对象的内部实现细节,只暴露必要的接口给外部。例如,在一个银行账户类中,账户余额这个数据成员是被封装起来的,外部不能直接访问和修改,而是通过存款、取…...
深度与视差的关系及其转换
深度与视差的关系及其转换 在计算机视觉和立体视觉中,深度和视差是两个重要的概念。理解这两者之间的关系对于实现立体图像处理、三维重建以及深度估计至关重要。在这篇博客中,我们将深入探讨深度和视差的概念,并介绍它们之间的转换关系。 …...
安全见闻全解析
跟随 泷羽sec团队学习 声明! 学习视频来自B站up主 泷羽sec 有兴趣的师傅可以关注一下,如涉及侵权马上删除文章,笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流,其他均与本人以及…...

搭建Tomcat(四)---Servlet容器
目录 引入 Servlet容器 一、优化MyTomcat ①先将MyTomcat的main函数搬过来: ②将getClass()函数搬过来 ③创建容器 ④连接ServletConfigMapping和MyTomcat 连接: ⑤完整的ServletConfigMapping和MyTomcat方法: a.ServletConfigMappin…...

PT2044A 单触控单输出IC
1 产品概述 ● PT2044A 是一款单通道触摸检测芯片。该芯片内建稳压电路,提供稳定电压给触摸感应电路使用。同时内部集成高效完善的触摸检测算法,使得芯片具有稳定的触摸检测效果。该芯片专为取代传统按键而设计,具有宽工作电压与低功耗的特性…...

docker安装mysql5.7
1、宿主机创建映射目录 mkdir -p /data/mysql/log mkdir -p /data/mysql/data mkdir -p /data/mysql/conf这里我放在了/data/mysql目录下 2、拉取mysql镜像 docker pull mysql:5.7注意是5.7版本,如果是8版本操作会略有不同,下篇文章介绍安装8版本的操…...

安卓 文件管理相关功能记录
文件管理细分为图片、视频、音乐、文件四类 目录 权限 静态声明权限 动态检查和声明权限方法 如何开始上述动态申请的流程 提示 图片 获取图片文件的对象列表 展示 删除 视频 获取视频文件的对象列表 获取视频file列表 按日期装载视频文件列表 展示 播放 删除…...

GB28181系列三:GB28181流媒体服务器ZLMediaKit
我的音视频/流媒体开源项目(github) GB28181系列目录 目录 一、ZLMediaKit介绍 二、 ZLMediaKit安装、运行(Ubuntu) 1、安装 2、运行 3、配置 三、ZLMediaKit使用 一、ZLMediaKit介绍 ZLMediaKit是一个基于C11的高性能运营级流媒体服务框架,项目地址…...

ScottPlot学习的常用笔记
ScottPlot学习的常用笔记 写在前面版本的选择第一个障碍:版本问题。 ScottPlot4.0的官方网站与示例官方起始页cookbook5.0Demo4.1 demo以4.1为例,解压和运行如下: 下载源代码和编译先说结论: 写在前面 之前调研的TraceCompass&am…...

二、mapbox-gl实现白膜立体建筑
有时候我们只有二维的面数据,怎么实现类似高德地图中的白膜立体建筑呢?在mapbox-gl中很容易实现,具体如下。 要在Vue中结合Mapbox显示自定义的GeoJSON数据,并实现建筑物的白膜效果,我们需要执行以下步骤: …...
mybatisplus 分库查询
mybatisplus 分库查询 比如我们的项目有两个数据库 不同的表在不同的库 我们是可以使用mybatisplus来实现 首选引入pom <dependency><groupId>com.baomidou</groupId><artifactId>dynamic-datasource-spring-boot-starter</artifactId><vers…...

计算属性 (vue3)
二 实例 1route.query.type...
RabbitMQ 安装、配置和使用介绍 使用前端js直接调用方式
1. 安装 RabbitMQ 1.1 安装 Erlang RabbitMQ 是基于 Erlang 语言开发的,因此首先需要安装 Erlang。 在 Ubuntu 上安装 Erlang: bash sudo apt-get update sudo apt-get install erlang 在 CentOS 上安装 Erlang: bash sudo yum insta…...

电脑显示器选购指南2024
选择显示器是五花八门的显示参数,如何选择,以下给出参数说明,及部分参考: 1. 尺寸和分辨率 尺寸(英寸) 根据使用距离和用途选择合适的屏幕尺寸: 21-24 英寸:适合小桌面空间、日常…...

vue2中如何实现自定义指令
实现自动聚焦功能 1.不用自定义指令 使用生命周期钩子mounted 2.使用自定义指令 1. 使用全局组件 首先在main.js中注册 然后在组件中直接使用v-指令名 2. 使用局部注册 局部注册和全局注册类似 如果很多组件需要自定义,建议使用自定义指令注册在全局...

QT从入门到精通(一)——Qlabel介绍与使用
1. QT介绍——代码测试 Qt 是一个跨平台的应用程序开发框架,广泛用于开发图形用户界面(GUI)应用程序,也支持非图形应用程序的开发。Qt 提供了一套工具和库,使得开发者能够高效地构建高性能、可移植的应用程序。以下是…...
【jpa】springboot使用jpa示例
目录 1. 请求示例2. pom依赖3. application.yaml4.controller5. service6. repository7. 实体8. 启动类 1. 请求示例 curl --location --request POST http://127.0.0.1:8080/user \ --header User-Agent: Apifox/1.0.0 (https://apifox.com) \ --header Content-Type: applic…...

Python Flask Web框架快速入门
Flask 入门Demo Flask 开发环境搭建,执行如下指令: pip install flask# 第一节: Flask 快速入门from flask import Flask app Flask(__name__)app.route(/flask) def hello_flask():return Hello Flaskapp.run()核心代码剖析: 从flask包导…...

ansible自动化运维(五)roles角色管理
目录 Roles角色管理 创建nginx的角色目录 定义任务配置文件: 定义jinjia2模板: 定义nginx yml文件 检查语法,执行命令 检验结果: Roles角色管理 角色(roles)是ansible自1.2版本开始引入的新特性&…...
uniapp 对接腾讯云IM群组成员管理(增删改查)
UniApp 实战:腾讯云IM群组成员管理(增删改查) 一、前言 在社交类App开发中,群组成员管理是核心功能之一。本文将基于UniApp框架,结合腾讯云IM SDK,详细讲解如何实现群组成员的增删改查全流程。 权限校验…...
在rocky linux 9.5上在线安装 docker
前面是指南,后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...
【解密LSTM、GRU如何解决传统RNN梯度消失问题】
解密LSTM与GRU:如何让RNN变得更聪明? 在深度学习的世界里,循环神经网络(RNN)以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而,传统RNN存在的一个严重问题——梯度消失&#…...
基于数字孪生的水厂可视化平台建设:架构与实践
分享大纲: 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年,数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段,基于数字孪生的水厂可视化平台的…...

Mac软件卸载指南,简单易懂!
刚和Adobe分手,它却总在Library里给你写"回忆录"?卸载的Final Cut Pro像电子幽灵般阴魂不散?总是会有残留文件,别慌!这份Mac软件卸载指南,将用最硬核的方式教你"数字分手术"࿰…...
关于 WASM:1. WASM 基础原理
一、WASM 简介 1.1 WebAssembly 是什么? WebAssembly(WASM) 是一种能在现代浏览器中高效运行的二进制指令格式,它不是传统的编程语言,而是一种 低级字节码格式,可由高级语言(如 C、C、Rust&am…...
Caliper 配置文件解析:config.yaml
Caliper 是一个区块链性能基准测试工具,用于评估不同区块链平台的性能。下面我将详细解释你提供的 fisco-bcos.json 文件结构,并说明它与 config.yaml 文件的关系。 fisco-bcos.json 文件解析 这个文件是针对 FISCO-BCOS 区块链网络的 Caliper 配置文件,主要包含以下几个部…...
LangFlow技术架构分析
🔧 LangFlow 的可视化技术栈 前端节点编辑器 底层框架:基于 (一个现代化的 React 节点绘图库) 功能: 拖拽式构建 LangGraph 状态机 实时连线定义节点依赖关系 可视化调试循环和分支逻辑 与 LangGraph 的深…...
k8s从入门到放弃之HPA控制器
k8s从入门到放弃之HPA控制器 Kubernetes中的Horizontal Pod Autoscaler (HPA)控制器是一种用于自动扩展部署、副本集或复制控制器中Pod数量的机制。它可以根据观察到的CPU利用率(或其他自定义指标)来调整这些对象的规模,从而帮助应用程序在负…...
【Kafka】Kafka从入门到实战:构建高吞吐量分布式消息系统
Kafka从入门到实战:构建高吞吐量分布式消息系统 一、Kafka概述 Apache Kafka是一个分布式流处理平台,最初由LinkedIn开发,后成为Apache顶级项目。它被设计用于高吞吐量、低延迟的消息处理,能够处理来自多个生产者的海量数据,并将这些数据实时传递给消费者。 Kafka核心特…...