nfc读卡uniapp插件,由中软高科进行开发,主要是通过NFC读取居民身份证、港澳台居住证、外国人居住证、护照等证卡的信息。经过多个版本的升级更新,目前性能已趋于稳定,并且读卡速度较之最初版本有了大的提升。
注意事项
测试使用的 appid 不可用于商用(否则后果自负)。
商用的 appid 请务必联系我司商务进行分配。
uniapp使用原生插件示例
1、加载插件
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, "港澳台居住证")