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, "港澳台居住证")
相关推荐
记得开心一点嘛11 小时前
uniapp --- 配置文件
前端·typescript·uni-app
Bingo_BIG11 小时前
uni-app main.js中全局变量的使用
javascript·vue.js·uni-app
林涧泣11 小时前
【Uniapp-Vue3】showActionSheet从底部向上弹出操作菜单
uni-app
Bingo_BIG11 小时前
uni-app vue3 常用页面 组合式api方式
前端·javascript·uni-app
BMG-Princess19 小时前
uni-app
uni-app
蜕变菜鸟2 天前
uni-app 中使用微信小程序第三方 SDK 及资源汇总
微信小程序·小程序·uni-app
院人冲冲冲2 天前
element表格滚动错位问题,使用uniapp写的项目
uni-app
竣子好逑2 天前
uniapp 微信小程序 editor 富文本编辑器
微信小程序·小程序·uni-app
陶甜也3 天前
uniapp 自定义日历组件 源码
前端·javascript·css·vue.js·uni-app
礼貌而已3 天前
vue3+ts+uniapp 微信小程序(第一篇)—— 微信小程序定位授权,位置信息权限授权
微信小程序·小程序·uni-app