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, "港澳台居住证")
相关推荐
咸虾米_2 小时前
开发uniapp前端通用价格组件提交到DCloud插件市场
uni-app·商城·开发插件·dcloud插件市场·扩展组件
郑州光合科技余经理2 小时前
实战分享:如何构建东南亚高并发跑腿配送系统
java·开发语言·javascript·spring cloud·uni-app·c#·php
2501_916007472 小时前
iOS与Android符号还原服务统一重构实践总结
android·ios·小程序·重构·uni-app·iphone·webview
嘿siri3 小时前
uniapp enter回车键不触发消息发送,已解决
前端·前端框架·uni-app·vue
00后程序员张4 小时前
fastlane 结合 appuploader 命令行实现跨平台上传发布 iOS App
android·ios·小程序·https·uni-app·iphone·webview
2501_915106325 小时前
iOS 性能优化这件事,结合多工具分析运行期性能问题
android·ios·性能优化·小程序·uni-app·cocoa·iphone
嘿siri5 小时前
自定义app端、小程序端和H5等多端自定义键盘输入框,跟随系统键盘弹出和隐藏
javascript·小程序·uni-app·uniapp
游戏开发爱好者85 小时前
App Store 上架流程,结合多工具协作
android·ios·小程序·https·uni-app·iphone·webview
cesske5 小时前
如何在yii2的uniapp项目中处理提交重复问题?
uni-app·状态模式
茶憶6 小时前
UniApp 安卓端实现文件的生成,写入,获取文件大小以及压缩功能
android·javascript·vue.js·uni-app