当前位置: 首页 > 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版本开始引入的新特性&…...

06_Cursor之上下文管理与代码库理解

关键字&#xff1a;上下文管理, 代码库理解, 符号引用, Git集成, 图像上下文, Cursor 06_Cursor之上下文管理与代码库理解 Cursor知识体系 Cursor知识体系&#xff08;续&#xff09; | -- 上下文管理层 | -- 代码库级理解 | | -- 项目结构分析 | | -- 依赖关系追…...

LibEdificio嵌入式教学库:硬件映射驱动与楼宇灯光实验平台

1. 项目概述LibEdificio 是一款面向嵌入式教育平台的专用控制库&#xff0c;专为“Building Lights 教学系统”&#xff08;楼宇灯光教学实验平台&#xff09;设计。该系统并非通用工业楼宇自控设备&#xff0c;而是一套结构化、模块化、可编程的硬件教学套件&#xff0c;广泛应…...

Elasticsearch-PHP异步搜索终极指南:如何实现高性能搜索应用

Elasticsearch-PHP异步搜索终极指南&#xff1a;如何实现高性能搜索应用 【免费下载链接】elasticsearch-php Official PHP client for Elasticsearch. 项目地址: https://gitcode.com/gh_mirrors/el/elasticsearch-php Elasticsearch-PHP是官方PHP客户端&#xff0c;为…...

OpenClaw内容审核:Qwen3.5-9B-AWQ-4bit实现图片敏感内容过滤

OpenClaw内容审核&#xff1a;Qwen3.5-9B-AWQ-4bit实现图片敏感内容过滤 1. 为什么需要轻量级内容审核方案 作为一个运营过多个UGC平台的技术人&#xff0c;我深知内容审核的痛点。早期我用过商业审核API&#xff0c;但面临三个问题&#xff1a;一是成本高&#xff0c;每千张…...

STM32标准库开发入门与实战指南

1. STM32入门指南&#xff1a;从零开始掌握标准库开发作为一名嵌入式开发者&#xff0c;我深知STM32的学习曲线有多陡峭。记得我第一次接触STM32时&#xff0c;面对密密麻麻的寄存器手册和复杂的开发环境&#xff0c;完全不知从何入手。经过多年的项目实践和教学经验&#xff0…...

第三方软件测评机构中CMA与CNAS资质对软件验收的重要性

CMA与CNAS资质的重要性 在软件项目验收过程中&#xff0c;第三方软件测评机构的CMA&#xff08;中国计量认证&#xff09;与CNAS&#xff08;中国合格评定国家认可委员会&#xff09;资质至关重要。这些资质不仅是机构专业能力的体现&#xff0c;更是确保测试结果公正、准确、可…...

告别手动启动:利用NSSM为任意可执行程序打造可靠的Windows后台服务

1. 为什么需要将程序注册为Windows服务&#xff1f; 在日常开发运维中&#xff0c;我们经常会遇到这样的场景&#xff1a;一个Python脚本需要24小时不间断运行&#xff0c;一个Java应用需要在服务器重启后自动恢复&#xff0c;或者一个Go程序需要以守护进程的方式在后台稳定执行…...

告别命令行恐惧!在Ubuntu 20.04上像装App一样轻松安装Typora(附国内源配置)

告别命令行恐惧&#xff01;在Ubuntu 20.04上像装App一样轻松安装Typora&#xff08;附国内源配置&#xff09; 第一次在Linux系统上安装软件时&#xff0c;面对黑底白字的终端窗口&#xff0c;很多人会本能地产生抗拒感。这种感受就像突然被丢进一个全英文的异国机场——你知道…...

新手避坑指南:用Selenium和MongoDB爬取东方财富股吧评论(附完整代码)

金融数据爬虫实战&#xff1a;Selenium与MongoDB避坑全攻略 第一次尝试用Selenium爬取东方财富股吧数据时&#xff0c;我盯着屏幕上第20次出现的"方正证券吧"跳转页面&#xff0c;终于意识到自己触发了反爬机制。作为过来人&#xff0c;我整理出这份涵盖环境配置、反…...

用MATLAB搞定模电实验:单管共射放大电路静态工作点与放大倍数的保姆级仿真

MATLAB仿真单管共射放大电路&#xff1a;从理论到实践的完整指南 引言 在电子工程领域&#xff0c;单管共射放大电路是模拟电路设计的基石之一。传统实验教学中&#xff0c;学生往往需要花费大量时间搭建实体电路、调整参数并测量数据&#xff0c;这不仅效率低下&#xff0c;…...