Uniapp插件如何通过NFC读取多种证卡信息?

nfc读卡uniapp插件,由中软高科进行开发,主要是通过NFC读取居民身份证、港澳台居住证、外国人居住证、护照等证卡的信息。经过多个版本的升级更新,目前性能已趋于稳定,并且读卡速度较之最初版本有了大的提升。

注意事项

测试使用的 appid 不可用于商用(否则后果自负)。

商用的 appid 请务必联系我司商务进行分配。

uniapp使用原生插件示例

1、加载插件

NFC身份证件读取------插件市场链接

javascript 复制代码
// 获取 读证件的 插件
var readCardModule = uni.requireNativePlugin("CSHT-ReadCard");

2、参数设置

javascript 复制代码
// 参数配置
   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"; // 出生日期,格式为 YYMMDD
    config.dateOfExpiryStr = "261113"; // 有效日期,格式为 YYMMDD

    readCardModule.setReadCardConfig(config, (ret) => {
        var status = ret.status; 
        var msg = ret.msg; // 状态信息
        this.$data.status = 'status: ' + status + '  msg: ' + msg;

        if(status){
            // 参数设置成功,初始化读卡
            this.readCardInit();
        }
    });

3、初始化读卡

javascript 复制代码
   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、初始化成功后,即可开启读卡

javascript 复制代码
// 跳转原生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;
     }
 });

手动停止读卡

正常读卡时,不需要手动去停止,读卡结束后,会自动处理停止。

javascript 复制代码
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照片

状态码对应表

javascript 复制代码
    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, "串口异常"),

卡类型

javascript 复制代码
    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, "港澳台居住证")
相关推荐
尚学教辅学习资料17 分钟前
基于SpringBoot+vue+uniapp的智慧旅游小程序+LW示例参考
vue.js·spring boot·uni-app·旅游
烂蜻蜓5 小时前
前端已死?什么是前端
开发语言·前端·javascript·vue.js·uni-app
家里有只小肥猫16 小时前
uniApp小程序保存canvas图片
前端·小程序·uni-app
小徐_233316 小时前
从空白到交互:用Trae快速搭建uni-app AI对话小程序页面
前端·uni-app·trae
貂蝉空大19 小时前
uni-app开发安卓和ios app 真机调试
android·ios·uni-app
程楠楠&M19 小时前
uni-app(位置1)
前端·javascript·uni-app·node.js
破z晓19 小时前
uniapp 整合openlayers 编辑图形文件并上传到服务器
前端·javascript·uni-app
寰宇软件1 天前
PHP房屋出租出售高效预约系统小程序源码
前端·小程序·uni-app·vue·php
尚学教辅学习资料1 天前
基于SpringBoot的宠物服务系统+uniapp小程序+LW参考示例
spring boot·uni-app·宠物
真的不想写实验1 天前
uniapp引入ucharts组件不显示
uni-app