当前位置: 首页 > news >正文

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();
}

附录

身份证详细信息

字段类型注释
typeint1080:中国居民身份证 1082:港澳台居住证
addressstring家庭住址
birthdaystring出生日期
dnstringdn码
endDatestring身份证结束时间
startDatestring身份证生效时间
idstring身份证号码
issuestring签发机关
namestring姓名
nationstring民族
sexstring性别
uuidstringuuid
base64ImageStringbase64照片

外国人永久居住证

字段类型注释
typeint1081:外国人永久居住证
birthdaystring出生日期
dnstringdn码
endDatestring身份证结束时间
startDatestring身份证生效时间
idstring身份证号码
issuestring签发机关
sexstring性别
uuidstringuuid
base64Imagestringbase64照片
nameChinesestring中文姓名
nameEnglishstring英文姓名
nameEnglishAddstring英文附加姓名
nationlitystring国籍
cardVersionstring卡版本号
cardTypestring卡类型
historicalNumberstring历史号码
renewalNumberstring续签数

电子护照详细信息

字段类型注释
nameOfHolderstring中文姓名
primaryIdentifierstring
secondaryIdentifierstring
genderstring性别 M男 F女
dateOfBirthstring生日
nationalitystring国家码
dateOfExpirystring有效期
documentNumberstring护照号码
durationlong解码时长
base64ImageStringbase64照片

状态码对应表

    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的高性能运营级流媒体服务框架,项目地址&#xf…...

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 语言开发的&#xff0c;因此首先需要安装 Erlang。 在 Ubuntu 上安装 Erlang&#xff1a; bash sudo apt-get update sudo apt-get install erlang 在 CentOS 上安装 Erlang&#xff1a; bash sudo yum insta…...

电脑显示器选购指南2024

选择显示器是五花八门的显示参数&#xff0c;如何选择&#xff0c;以下给出参数说明&#xff0c;及部分参考&#xff1a; 1. 尺寸和分辨率 尺寸&#xff08;英寸&#xff09; 根据使用距离和用途选择合适的屏幕尺寸&#xff1a; 21-24 英寸&#xff1a;适合小桌面空间、日常…...

vue2中如何实现自定义指令

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

QT从入门到精通(一)——Qlabel介绍与使用

1. QT介绍——代码测试 Qt 是一个跨平台的应用程序开发框架&#xff0c;广泛用于开发图形用户界面&#xff08;GUI&#xff09;应用程序&#xff0c;也支持非图形应用程序的开发。Qt 提供了一套工具和库&#xff0c;使得开发者能够高效地构建高性能、可移植的应用程序。以下是…...

【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 开发环境搭建&#xff0c;执行如下指令&#xff1a; pip install flask# 第一节: Flask 快速入门from flask import Flask app Flask(__name__)app.route(/flask) def hello_flask():return Hello Flaskapp.run()核心代码剖析&#xff1a; 从flask包导…...

ansible自动化运维(五)roles角色管理

目录 Roles角色管理 创建nginx的角色目录 定义任务配置文件&#xff1a; 定义jinjia2模板&#xff1a; 定义nginx yml文件 检查语法&#xff0c;执行命令 检验结果&#xff1a; Roles角色管理 角色&#xff08;roles&#xff09;是ansible自1.2版本开始引入的新特性&…...

在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能

下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能&#xff0c;包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...

定时器任务——若依源码分析

分析util包下面的工具类schedule utils&#xff1a; ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类&#xff0c;封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz&#xff0c;先构建任务的 JobD…...

自然语言处理——循环神经网络

自然语言处理——循环神经网络 循环神经网络应用到基于机器学习的自然语言处理任务序列到类别同步的序列到序列模式异步的序列到序列模式 参数学习和长程依赖问题基于门控的循环神经网络门控循环单元&#xff08;GRU&#xff09;长短期记忆神经网络&#xff08;LSTM&#xff09…...

使用 SymPy 进行向量和矩阵的高级操作

在科学计算和工程领域&#xff0c;向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能&#xff0c;能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作&#xff0c;并通过具体…...

Web 架构之 CDN 加速原理与落地实践

文章目录 一、思维导图二、正文内容&#xff08;一&#xff09;CDN 基础概念1. 定义2. 组成部分 &#xff08;二&#xff09;CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 &#xff08;三&#xff09;CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 &#xf…...

C++.OpenGL (14/64)多光源(Multiple Lights)

多光源(Multiple Lights) 多光源渲染技术概览 #mermaid-svg-3L5e5gGn76TNh7Lq {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-3L5e5gGn76TNh7Lq .error-icon{fill:#552222;}#mermaid-svg-3L5e5gGn76TNh7Lq .erro…...

面向无人机海岸带生态系统监测的语义分割基准数据集

描述&#xff1a;海岸带生态系统的监测是维护生态平衡和可持续发展的重要任务。语义分割技术在遥感影像中的应用为海岸带生态系统的精准监测提供了有效手段。然而&#xff0c;目前该领域仍面临一个挑战&#xff0c;即缺乏公开的专门面向海岸带生态系统的语义分割基准数据集。受…...

使用LangGraph和LangSmith构建多智能体人工智能系统

现在&#xff0c;通过组合几个较小的子智能体来创建一个强大的人工智能智能体正成为一种趋势。但这也带来了一些挑战&#xff0c;比如减少幻觉、管理对话流程、在测试期间留意智能体的工作方式、允许人工介入以及评估其性能。你需要进行大量的反复试验。 在这篇博客〔原作者&a…...

LabVIEW双光子成像系统技术

双光子成像技术的核心特性 双光子成像通过双低能量光子协同激发机制&#xff0c;展现出显著的技术优势&#xff1a; 深层组织穿透能力&#xff1a;适用于活体组织深度成像 高分辨率观测性能&#xff1a;满足微观结构的精细研究需求 低光毒性特点&#xff1a;减少对样本的损伤…...

HTML前端开发:JavaScript 获取元素方法详解

作为前端开发者&#xff0c;高效获取 DOM 元素是必备技能。以下是 JS 中核心的获取元素方法&#xff0c;分为两大系列&#xff1a; 一、getElementBy... 系列 传统方法&#xff0c;直接通过 DOM 接口访问&#xff0c;返回动态集合&#xff08;元素变化会实时更新&#xff09;。…...