注意事项
初始化调用一次即可
测试使用的 appid 不可以用于商用(否则后果自负)。
商用的 appid 请务必联系我司商务进行分配。
添加依赖库
· 添加读卡SDK maven仓库地址
allprojects {
repositories {
// 中软高科读卡SDK仓库
maven {
url 'https://gitee.com/cshtzrgk/read-card-sdk/raw/master/Repositorys'
}
maven { url 'https://developer.huawei.com/repo/' }
maven { url 'https://developer.hihonor.com/repo' }
google()
jcenter()
maven { url 'https://jitpack.io' }
}
}
· 依赖最新版本的读卡SDK
// 中软核心读卡SDK(必须)
implementation "io.github.CshtZrgk:CshtReadCard:4.1.7"
implementation "io.github.CshtZrgk:mqttService:1.0.1"
// 串口、USB读卡(可选,不需要可以不添加依赖)
implementation "io.github.CshtZrgk:CshtReadCard_iot:1.1.0"
// 中软 OCR 识别护照机读码(可选,不需要可以不添加依赖。也可自由选择自己或其他第三方OCR库)
// 中软 OCR 库使用方法,详见文档底部:OCR使用方法
implementation 'io.github.CshtZrgk:ocr-android:1.0.6'
// 华为、荣耀、小米、vivo、oppo等厂商的手机使用时,请务必引用此 OAID SDK
implementation "io.github.CshtZrgk:oaid_sdk:1.0.25"
// 在 build.gradle 配置 HUAWEI Maven仓地址
// maven { url 'https://developer.huawei.com/repo/' }
// maven { url 'https://developer.hihonor.com/repo' }
1、读卡参数配置
ReadSettingBuilder readSettingBuilder = ReadCardManager
// 上下文
.builder(getBaseContext())
// 是否开启蜂鸣器
.buildOpenSound(true)
// 是否开启日志,第二位参数为日志保存的目录,
// 传空字符时,默认在 Android/data/包名/files/zrgkreadcardlog 下
.buildOpenLog(true, "")
// 测试使用的 appid 不可以用于商用(否则后果自负)。
// 商用的 appid 请务必联系我司商务进行分配。
.buildAppId("test")
// 设置IP与端口号(传空字符和0时,默认使用内置地址)
.buildIpAndPort("yfs4.sfzydq.com", 9999)
// 设置读卡类型(目前支持USB、SERIALPORT)
.buildReadCardType(ReadCardType.USB)
// 照片解码类型(目前支持无照片、服务器解码、本地解码照片)
.buildDecodeImageType(DecodeImageType.LOCAL_DECODE)
// 设置开启的卡片识别类型(默认已启用了IC卡、身份证、港澳台、外国人居住证,其余证卡类型需要手动配置开启,用不到的可以不开启,以免影响读卡速度)
.buildEnableCardScanType(EnableCardScanType.CARD_SB, EnableCardScanType.CARD_BANK)
// 解码身份证时,是否需要生成身份证正反面照片
.buildNeedIdCardPhoto(false)
ReadCardOutMethod readCardManager = readSettingBuilder.buildCreate();
2、读卡初始化方法
readCardManager.readCardInit((code,msg) -> {
if (code == StatusCode.ININ_ING.getCode()) {
Log.e("mtj", "初始化中");
} else if (code == StatusCode.ININ_OK.getCode()) {
Log.e("mtj", "初始化成功");
} else {
// 其他错误,对照错误码查看
Log.e("mtj", "初始化失败");
}
});
3、用户开启寻卡读卡
初始化成功之后,可以调用寻卡方法
· 开启自动寻卡方法如下:
readCardManager.readCardStart(listener);
· 开启单次寻卡方法如下:
单次读卡,如果没有读卡成功,需应用层自己手动再次调用单次读卡方法(自己依次循环)
readCardManager.readCardOnceStart(listener);
方法参数说明
| 参数名 | 必选 | 类型 | 说明 |
|---|---|---|---|
| listener | 是 | ReadCardListener | 方法回调 |
ReadCardListener回调说明
| 方法名 | 参数 | 说明 | |
|---|---|---|---|
| onReadIDCardSuccess(IdCardData) | IdCardData(身份证信息) | 详见身份证信息表 | |
| onReadICCardSuccess(icNumber: String,type:int) | icNumber(卡号) | type(卡片类型) | 其他类型卡成功回调方法,详见卡类型表 |
| onReadCardState(type: Int, msg: String) | type(状态码)msg(状态信息) | 失败或其他状态回调,详见错误码表 | |
| onReadIDCardPhoto(Bitmap frontPhoto, Bitmap backPhoto) | frontPhoto(身份证正面照)backPhoto(反面照) | 配置参数buildNeedIdCardPhoto(true)有效 | |
| onResultM1Data(byte[] data) | data:读M1卡成功后返回的数据 |
4、关闭自动寻卡
初始化成功后,如果开启了自动寻卡,可以手动关闭自动寻卡(不释放USB连接)
readCardManager.closeOrOpenAutoFindCard(false);
5、用户关闭读卡、释放USB连接
释放了USB连接,再次需要读卡时,需要重新调用初始化方法
readCardManager.readCardStop();
6、读M1卡、制卡
1、操作M1卡之前,如果开启了自动寻卡,需调用关闭自动寻卡方法,先关闭自动寻卡
2、读M1卡块数据成功时,数据会回调 readCardListener 的 onResultM1Data(byte[] data)
3、读写的状态码,会回调 readCardListener 的 onReadCardState(type: Int, msg: String)
readCardManager.M1Card(type: Int, byteArray: ByteArray, readCardListener: ReadCardListener)
* ==================================================================================================
* @param type 1: 读M1卡的块数据 2:写块数据 3:扇区数据块加密
* ==================================================================================================
* 当 type == 1 时:
* byteArray 格式 :<扇区号(1 byte)> + <秘钥类型(1 byte)> + <秘钥数据(6 byte)> + <块号(1 byte)>
* ==================================================================================================
* 当 type == 2 时:
* byteArray 格式 :<扇区号(1 byte)> + <秘钥类型(1 byte)> + <秘钥数据(6 byte)> + <块号(1 byte)> + <块数据 16 byte 每包>
* ==================================================================================================
* 当 type == 3 时:
* byteArray 格式 :<扇区号(1 byte)> + <秘钥类型(1 byte)> + <旧 秘钥数据(6 byte)> + <新 秘钥数据(6 byte)>
** ==================================================================================================
7、其他设置
单独开关日志
// 是否开启日志,第二位参数为日志保存的目录,
// 传空字符时,默认在 Android/data/包名/files/zrgkreadcardlog 下
readSettingBuilder.buildOpenLog(false, "");
获取设备信息
readCardManager.readCardDeviceid();
获取固件版本号
readCardManager.readFirmwareVersion();
身份证详细信息IdCardData
| 字段 | 类型 | 注释 |
|---|---|---|
| type | int | 1080:中国居民身份证 |
| address | string | 家庭住址 |
| birthday | string | 出生日期 |
| dn | string | dn码 |
| endDate | string | 身份证结束时间 |
| startDate | string | 身份证生效时间 |
| id | string | 身份证号码 |
| image | ByteArray | 照片原始信息 |
| issue | string | 签发机关 |
| name | string | 姓名 |
| nation | string | 民族 |
| sex | string | 性别 |
| uuid | string | uuid |
| bitmap | Bitmap | 照片 |
外国人永久居住证IdCardData
| 字段 | 类型 | 注释 |
|---|---|---|
| type | int | 1081:新版外国人永久居住证1083:旧版外国人永久居住证 |
| birthday | string | 出生日期 |
| dn | string | dn码 |
| endDate | string | 身份证结束时间 |
| startDate | string | 身份证生效时间 |
| id | string | 身份证号码 |
| image | ByteArray | 照片原始信息 |
| issue | string | 签发机关 |
| sex | string | 性别 |
| uuid | string | uuid |
| bitmap | Bitmap | 照片 |
| nameChinese | string | 中文姓名 |
| nameEnglish | string | 英文姓名 |
| nameEnglishAdd | string | 英文姓名备用 |
| nationlity | string | 国籍 |
| cardVersion | string | 卡版本号 |
| cardType | string | 卡类型 |
| historicalNumber | string | 既往版本证件号码关联项 |
| renewalNumber | string | 换证次数 |
港澳台居住证详细信息IdCardData
| 字段 | 类型 | 注释 |
|---|---|---|
| type | int | 1082:港澳台居住证 |
| address | string | 家庭住址 |
| birthday | string | 出生日期 |
| dn | string | dn码 |
| endDate | string | 身份证结束时间 |
| startDate | string | 身份证生效时间 |
| id | string | 身份证号码 |
| image | ByteArray | 照片原始信息 |
| issue | string | 签发机关 |
| name | string | 姓名 |
| nation | string | 民族 |
| sex | string | 性别 |
| uuid | string | uuid |
| bitmap | Bitmap | 照片 |
| passCheckId | string | 通行证号码 |
| issuesNumber | string | 签发次数 |
状态码对应表
READCARD_SUCCESS(1000, "解码成功"),
ININ_ING(100, "初始化中"),
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_LCT_STUDENT(1051, "绿城通学生卡"),
CARD_LCT_NORMAL(1052, "绿城通普通卡"),
CARD_LCT_OLD(1053, "绿城通老年卡"),
CARD_SB(1060, "社保卡"),
CARD_BANK(1061, "银行卡"),
CARD_CMCC_SIM(1070, "中国移动超级SIM卡"),
CARD_IDCARD(1080, "中国居民身份证"),
CARD_IDCARD_FOREIGN(1081, "新版外国永久居住证"),
CARD_IDCARD_GAT(1082, "港澳台居住证"),
CARD_IDCARD_FOREIGN_OLD(1083, "旧版外国永久居住证")