中软高科鸿蒙Next身份证读卡SDK集成说明

devtools/2025/1/20 2:20:01/

导入har

项目中导入提供的开发包 readcardlibrary.har

鸿蒙next的NFC使用配置,请参考官方文档。

需要在EntryAbility 中添加NFC tag相关的监听。

在项目的 module.json5 文件中需要配置NFC的权限

"requestPermissions": [{"name": "ohos.permission.NFC_TAG","reason": "$string:app_name"},{"name": "ohos.permission.NFC","reason": "$string:app_name"},{"name": "ohos.permission.INTERNET","reason": "$string:app_name"},{"name": "ohos.permission.STORE_PERSISTENT_DATA","reason": "$string:app_name"}]

还需要配置NFC的tag类型

"skills": [{"entities": ["entity.system.home"],"actions": ["action.system.home",// add the nfc tag action"ohos.nfc.tag.action.TAG_FOUND"],"uris": [{"type":"tag-tech/NfcA"},{"type":"tag-tech/IsoDep"},{"type":"tag-tech/NfcB"}// Add other technology if neccessary,// such as: NfcB/NfcF/NfcV/Ndef/MifareClassic/MifareUL/NdefFormatable]}]

在需要NFC读卡的界面使用SDK

// 读卡库
import { ReadCardManager, IdCardData } from 'readcardlibrary'
// NFC相关
import { tag, nfcController } from '@kit.ConnectivityKit';
// 状态码
let StatusCode = ReadCardManager.getInstance().StatusCodeEnum()

设置读卡参数

// 设置参数
ReadCardManager.getInstance().readSetting({decodeImageType: "dn1", // dn0: 无照片   dn1: 平台解码照片readCardType: 2, // 2:NFCsaveLog: false, // 是否保存日志文件openLocalCache: true, // 是否开启本地缓存ipPortArray: [{// 云解码服务器配置。address: 'yfs4.sfzydq.com',port: 9999,canUse: true}]})// 设置APPID
// 配置读卡 appid (正式商业APPID请联系我司商务分配)
ReadCardManager.getInstance().setAppId("");

接收到NFC TAG 开始读卡

/*** 接收到NFC TAG,开始读卡* @param tagInfo*/tagNfc(tagInfo: tag.TagInfo): void {try {console.log("canIUse NFC.Tag : " + canIUse("SystemCapability.Communication.NFC.Tag"));if (tagInfo == null || tagInfo == undefined) {console.log("no TagInfo to be created, ignore it.");return;}if (tagInfo.technology == null || tagInfo.technology == undefined) {console.log("technology is null");return;}let that = this;ReadCardManager.getInstance().startReadCard(tagInfo, (code: number, msg: string, value: Object, cardType: number) => {let code_msg = "code:" + code + "\n" + "msg:" + msg;console.log("\n" + code_msg);switch (code) {case StatusCode.ININ_ING.code: // 初始化中break;case StatusCode.ININ_OK.code: // 初始化成功that.showToast('初始化成功,请刷身份证');break;case StatusCode.ININ_FAILE.code: // 初始化失败that.showToast('初始化失败');break;case StatusCode.FIND_CARD_START.code: // 开始寻卡break;case StatusCode.FIND_CARD_SUCCESS.code: // 寻卡成功break;case StatusCode.READCARD_START.code: // 开始解码 请勿移动卡片that.loadingController.open();break;case StatusCode.READCARD_SUCCESS.code: // 解码成功that.loadingController.close();switch (cardType) {case StatusCode.CARD_IC.code: // IC卡console.log("IC卡:", value);that.message = "IC卡:" + value as string;break;case StatusCode.CARD_IDCARD.code: // 身份证// 读取到的身份证信息// 详细字段说明,详见文档下发的附录let data = value as IdCardData;let cardInfoStr = "";switch (data.type) {case StatusCode.CARD_IDCARD_CHINA.code:cardInfoStr = '\n姓名: ' + 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;that.message = "中国居民身份证:" + cardInfoStr;break;case StatusCode.CARD_IDCARD_GAT.code:cardInfoStr = '\n姓名: ' + data.name +'\n性别: ' + data.sex +'\n生日: ' + data.birthday +'\n住址: ' + data.address +'\n证件号码: ' + data.id +'\n签发机关: ' + data.issue +'\n有效期限: ' + data.startDate + '-' + data.endDate;that.message = "港澳台居住证:" + cardInfoStr;break;case StatusCode.CARD_IDCARD_FOREIGN.code:case StatusCode.CARD_IDCARD_FOREIGN_OLD.code:cardInfoStr = '\n中文姓名: ' + data.nameChinese +'\n英文姓名: ' + data.nameEnglish +'\n性别: ' + data.sex +'\n生日: ' + data.birthday +'\n国籍: ' + data.nationlity +'\n证件号码: ' + data.id +'\n有效期限: ' + data.startDate + '-' + data.endDate;that.message = "外国永久居住证:" + cardInfoStr;break;}// 当设置平台解码身份证照片时,// idCardInfo.imageBase64字段,为base64编码的照片字符串,可直接用于显示that.headImage = data.imageBase64;break;}break;case StatusCode.READCARD_FAILE.code: // 解码失败that.headImage = "";that.loadingController.close();that.showToast('解码失败');that.message = "解码失败:" + msg;break;}})} catch (error) {console.log("tag.getTagInfo catched error: " + error);}}
}

http://www.ppmy.cn/devtools/151979.html

相关文章

【进程与线程】前端进程与后端进程

在操作系统和计算机系统中,前端进程 和 后端进程 是两类不同的进程类型,主要根据进程的交互方式和运行特点来分类。 前端进程 前端进程 是指直接与用户交互的进程,通常负责处理用户输入、显示输出结果。它们通常运行在前台,用户…

【数据库】MySQL数据库SQL语句汇总

目录 1.SQL 通用语法 2.SQL 分类 2.1.DDL 2.2.DML 2.3.DQL 2.4.DCL 3.DDL 3.1.数据库操作 3.1.1.查询 3.1.2.创建 3.1.3.删除 3.1.4.使用 3.2.表操作 3.2.1.查询 3.2.2.创建 3.2.3.数据类型 3.2.3.1.数值类型 3.2.3.2.字符串类型 3.2.3.3.日期时间类型 3.2…

基于 Spring Boot、Vue 实现的调问开源问卷系统

是一款简单、高效、成熟、稳定、专业的开源问卷系统,自2012年启动至今经过9年的积累,已经形成一套完善的基于 JAVA WEB 的开源问卷表单解决方案。 🎉🎉🎉 企业版 全新的 企业版 已经发布,前后端分别采用 …

js高亮文本

高亮文本 const inputs ["这是一个普通文本&#xff0c;包含关键字测试。",<p style"font-size: 10px">这是一个<span>GVM</span> <strong>测试</strong>内容。</p>, ];const keywords ["测试", "G…

2025 年三个月自学计划 网络安全(黑客技术)

一、什么是网络安全 网络安全可以基于攻击和防御视角来分类&#xff0c;我们经常听到的 “红队”、“[渗透测试](https://docs.qq.com/doc/DY2FFR01PdWNUaUV5 "渗透测试")” 等就是研究攻击技术&#xff0c;而“蓝队”、“安全运营”、“安全运维”则研究防御技术。无…

leetcode-买卖股票问题

309. 买卖股票的最佳时机含冷冻期 - 力扣&#xff08;LeetCode&#xff09; 动态规划解题思路&#xff1a; 1、暴力递归&#xff08;难点如何定义递归函数&#xff09; 2、记忆化搜索-傻缓存法&#xff08;根据暴力递归可变参数确定缓存数组维度&#xff09; 3、严格表结构依…

电脑风扇声音大怎么办? 原因及解决方法

电脑风扇是电脑的重要组件之一&#xff0c;它的作用是为电脑的各个部件提供冷却&#xff0c;防止电脑过热。然而&#xff0c;有时候我们会发现电脑风扇的声音特别大&#xff0c;不仅影响我们的使用体验&#xff0c;也可能是电脑出现了一些问题。那么&#xff0c;电脑风扇声音大…

游戏引擎学习第80天

Blackboard&#xff1a;增强碰撞循环&#xff0c;循环遍历两种类型的 t 值 计划对现有的碰撞检测循环进行修改&#xff0c;以便实现一些新的功能。具体来说&#xff0c;是希望处理在游戏中定义可行走区域和地面的一些实体。尽管这是一个2D游戏&#xff0c;目标是构建一些更丰富…