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, "港澳台居住证")
相关推荐
Geek_Vison9 小时前
保险APP已经用了Flutter,还能接入小程序吗?
flutter·小程序·uni-app·mpaas·小程序容器
郑州光合科技余经理20 小时前
本地生活平台搭建:跨业态用户标识怎么贯通
java·开发语言·前端·后端·uni-app·php·ai编程
2501_915909062 天前
iOS应用从开发到上架App Store的完整发布流程与步骤指南
android·ios·小程序·https·uni-app·webview
不爱说话郭德纲2 天前
从“点点点”到一键出包:我把 uni-app x Android 离线打包做成了脚本
android·前端·uni-app
snotJam2 天前
关于Uniapp的Android自定义基座使用
android·uni-app
今年下半年3 天前
【微信小程序】uni-app + Vue3 + Vite 的小程序项目实现「进入指定范围才能打卡」的考勤功能
微信小程序·uni-app·定位·考勤
郑州光合科技余经理6 天前
海外版外卖加盟:总站与分站配送规则怎么分开管
java·开发语言·前端·后端·uni-app·php·ai编程
遗憾随她而去.8 天前
uniApp跨端开发: 解决不同平台显示差异问题
uni-app
程序鉴定师11 天前
2026年深圳小程序/App开发公司技术选型指南:从架构设计到交付标准全维度评估
java·小程序·uni-app·php·objective-c
Q264336502311 天前
【有源码】基于uni-app的旅游行程规划小程序-基于微信小程序的智慧文旅综合服务平台
java·微信小程序·小程序·uni-app·毕业设计·springboot·源代码