更新记录
1.2.1(2024-10-26) 下载此版本
新增蓝牙读卡;优化已知问题;
1.1.0(2024-04-19) 下载此版本
修复读卡弹窗遮挡问题
1.0.1(2024-03-13) 下载此版本
修改护照读卡问题 去除读卡界面跳转
查看更多平台兼容性
Android | Android CPU类型 | iOS |
---|---|---|
适用版本区间:5.0 - 14.0 | armeabi-v7a:支持,arm64-v8a:支持,x86:未测试 | × |
原生插件通用使用流程:
- 购买插件,选择该插件绑定的项目。
- 在HBuilderX里找到项目,在manifest的app原生插件配置中勾选模块,如需要填写参数则参考插件作者的文档添加。
- 根据插件作者的提供的文档开发代码,在代码中引用插件,调用插件功能。
- 打包自定义基座,选择插件,得到自定义基座,然后运行时选择自定义基座,进行log输出测试。
- 开发完毕后正式云打包
付费原生插件目前不支持离线打包。
Android 离线打包原生插件另见文档 https://nativesupport.dcloud.net.cn/NativePlugin/offline_package/android
iOS 离线打包原生插件另见文档 https://nativesupport.dcloud.net.cn/NativePlugin/offline_package/ios
注意事项:使用HBuilderX2.7.14以下版本,如果同一插件且同一appid下购买并绑定了多个包名,提交云打包界面提示包名绑定不一致时,需要在HBuilderX项目中manifest.json->“App原生插件配置”->”云端插件“列表中删除该插件重新选择
注意事项
测试使用的 appid 不可以用于商用(否则后果自负)。 商用的 appid 请务必联系我司商务进行分配。 Tel: 18039233198 wx: csht-beyond 技术支持:wx: CSHTZSF
uniapp使用插件步骤
1、加载插件
[NFC身份证件读取——插件市场链接](https://ext.dcloud.net.cn/plugin?id=16843)
// 获取 读证件的 插件
var readCardModule = uni.requireNativePlugin("CSHT-ReadCard");
2、参数设置
// 配置参数
var config = {
'openSound': true, // 蜂鸣器开关
'openLog': true, // 日志保存开关
'readType': 2, // 1: USB 2: NFC 3:串口读卡 5:Sam离线读卡 7:蓝牙 9:NFC电子护照
'appId': "test", // 测试APPID,商用的 appid 请务必联系我司商务进行分配
'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、初始化读卡
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、初始化成功后,开始读卡
// 开始读卡
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;
uni.hideLoading();
break;
case "ReadIDCardSuccess": // 读身份证成功
var data = ret.idCardData;
this.$data.headImage = ret.base64Image;
uni.hideLoading();
if (data.type == 1081) { // 外国人永居证
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": // 读护照成功
uni.hideLoading();
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;
}
});
手动停止读卡
正常读卡时,不需要手动去停止,读卡结束后,会自动处理停止。
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:新版外国人永久居住证1083:旧版外国人永久居住证 |
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照片 |
状态码对应表
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, "串口异常"),
卡类型
CARD_IC(1040, "IC卡"),
CARD_M1(1041, "M1卡"),
CARD_LCT_STUDENT(1051, "绿城通学生卡"),
CARD_LCT_NORMAL(1052, "绿城通普通卡"),
CARD_LCT_OLD(1053, "绿城通老年卡"),
CARD_SB(1060, "社保卡"),
CARD_BANK(1061, "银行卡"),
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, "港澳台居住证")
CARD_IDCARD_FOREIGN_OLD(1083, "旧版外国永久居住证"),