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

注意事项

初始化调用一次即可

测试使用的 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, "旧版外国永久居住证")
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容