中软高科身份证读写M1卡器Android开发集成介绍

185 阅读6分钟

注意事项

初始化调用一次即可

测试使用的 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);

方法参数说明

参数名必选类型说明
listenerReadCardListener方法回调

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

字段类型注释
typeint1080:中国居民身份证
addressstring家庭住址
birthdaystring出生日期
dnstringdn码
endDatestring身份证结束时间
startDatestring身份证生效时间
idstring身份证号码
imageByteArray照片原始信息
issuestring签发机关
namestring姓名
nationstring民族
sexstring性别
uuidstringuuid
bitmapBitmap照片

外国人永久居住证IdCardData

字段类型注释
typeint1081:新版外国人永久居住证1083:旧版外国人永久居住证
birthdaystring出生日期
dnstringdn码
endDatestring身份证结束时间
startDatestring身份证生效时间
idstring身份证号码
imageByteArray照片原始信息
issuestring签发机关
sexstring性别
uuidstringuuid
bitmapBitmap照片
nameChinesestring中文姓名
nameEnglishstring英文姓名
nameEnglishAddstring英文姓名备用
nationlitystring国籍
cardVersionstring卡版本号
cardTypestring卡类型
historicalNumberstring既往版本证件号码关联项
renewalNumberstring换证次数

港澳台居住证详细信息IdCardData

字段类型注释
typeint1082:港澳台居住证
addressstring家庭住址
birthdaystring出生日期
dnstringdn码
endDatestring身份证结束时间
startDatestring身份证生效时间
idstring身份证号码
imageByteArray照片原始信息
issuestring签发机关
namestring姓名
nationstring民族
sexstring性别
uuidstringuuid
bitmapBitmap照片
passCheckIdstring通行证号码
issuesNumberstring签发次数

状态码对应表

    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, "旧版外国永久居住证")