一、服务能力

服务名称 输入 输出 说明
云识读服务 通过NFC非接模式读取证件芯片中的信息完成证件信息的读取 身份文本信息和证件照片信息 身份文本信息包括姓名、身份证号、性别、民族、出生日期、住址、有效日期、签发机关

二、准备接入

1、应用申请:点击进入申请界面

2、客户端解码SDK及使用手册:点击下载

3、服务端查询SDK及使用手册:点击下载

三、实现流程

四、流程说明

流程1: 读取证件信息

手机使用客户端读卡SDK完成证件信息读取,参照读卡SDK文档以下内容:

A. 读卡初始化


EidLinkSE eid = EidLinkSEFactory.getEidLinkSE(mHandler, this, APPID, IP,PORT,1,ENVIDCODE);
// uiHandler SDK调用者传入Handler,用于处理返回信息
// mContext上下文
// APPID: 应用APPID  云识读分配的APPID
// ip地址   云识读分配的IP地址:testnidocr.eidlink.com 
// port端口号  云识读分配的端口:9989
// readtimes读卡次数,readtimes大于0,建议:1~5次 
// ENVIDCODE 环境识别码:默认26814

							

B. 开始读卡


readIDCard(Intent)
方法定义
public void readIDCard(Intent intent);
方法说明
NFC 读取身份证,读卡过程中产生的状态和结果,用Handler传递结果。 
根据Android Api,NFC两种实现方式:第一种见4.1.41,第二种readIDCard(Intent intent)
详情见Android api
参数
Intent  - NFC 读卡,读卡过程中产生的状态和结果,用Handler传递结果。
返回值 无
例
@Override
protected void onNewIntent(Intent intent) {
    super.onNewIntent(intent);
    /*注意事项: nfcAdapter.enableForegroundDispatch(this, pi, mFilters, mTechLists);
    * 中根据mFilters和mTechLists配置参数不同,intent.getAction()返回值可能不同*/
    if (NfcAdapter.ACTION_TECH_DISCOVERED.equals(intent.getAction())) {
    	try{
      		eid.readIDCard(intent);
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}

							

C. 读卡结果获取


private final Handler mHandler = new Handler(Looper.getMainLooper()) {
    @Override
    public void handleMessage(Message msg) {
        switch (msg.what) {
            case READ_CARD_START:
                tv_msg.setText("开始读卡");
                starttime = System.currentTimeMillis();
                break;
            case READ_CARD_FAILED:
                int s = msg.arg1;
                tv_msg.setText("读卡失败: "+s);
                break;
            case READ_CARD_SUCCESS:
                endtime = System.currentTimeMillis() - starttime;
                String reqid = (String) msg.obj;
                tv_msg.setText("读卡成功  "+reqid+"\n耗时: "+endtime+"ms");
                break;
            default:
                break;
        }
    }
};

							

流程2: 查询证件信息

服务端使用查询SDK进行查询身份信息结果。

业务参数说明

参数 命名 是否必填 描述
身份信息查询ID reqID 业务流水号,应用方生成,针对本次请求的唯一标识。
查询属性选项 qryType 0:仅返回数字身份
3或空:姓名+ 公民身份号码
4:照片base64编码
7:姓名+ 公民身份号码+照片base64编码
511:全信息
数字信封加密时方式 algorithmType 0:ECB 1:CBC

查询身份信息代码样例


public void idCardCheckTest() {
   String eIDServerIp = "testnidocr.eidlink.com";
   int eIDServerPort = 443;
   String appId = "";   //云识读分配的appid
   String appKey = ""; //云识读分配的appKey
   Config.setBasicInfo(eIDServerIp,eIDServerPort,appId,appKey);
   String reqID = "";//读卡成功reqid,次参数内容由读卡sdk提供
   /**
    *qryType 查询属性选项
    *  0:仅返回数字身份
    *  3  返回姓名+ 公民身份号码
    *  4:返回照片base64编码
    *  7:返回姓名+ 公民身份号码+照片base64编码
    *  511:全信息
    */
   String qryType = "";
   String  algorithmType = ""; //数字信封加密时方式: 0:ECB  1:CBC  空默认ECB
   PublicParam publicParam = new PublicParam();
   IdCardCheckParam idCardCheckParam = new IdCardCheckParam(publicParam, reqID ,qryType,algorithmType);
   CommonResult result = EidlinkService.idCardCheck(idCardCheckParam);
   // 00:返回正确结果
   if ("00".equals(result.getResult())) {
      System.out.println("===== 身份查询返回结果正常:" + result.getResult() + " === " + result.getResult_detail());
   } else {
      System.out.println("===== 身份查询返回结果异常:" + result.getResult() + " === " + result.getResult_detail());
   }
   System.out.println(JSONObject.fromObject(result).toString());
}

查询身份信息返回样例


{"appEidCode":"",,"biz_sequence_id":"hoYfG0gCdjdnbvlGE0Y","ciphertext":"{\"infoencode\":\"15acbd2c77be279243ae33d90422e59bd3925ffc827bc365bd5c56df88c386a70f82256a5f3d74dbfcfede3e9557497bcebc2a65bae7e1266cf899f35ea4f9ee5ba46ad554bbbc1c385c3d20512cce833543f2635abe77b5ec003f86dbff441e7e893e315d585f4424b30cfa3ca819f89dab7bbac8ad556791b92c999fac9d94ccfb36cb6047324365e4cb8a3398b6e11d21fd1230fba4e3d984326c8dfccbddbf5aecb440e8a66e197f9df9e49bdf7323ede8f013049a0711985ab9b5ac3a98099f77a6151e8193d2da155eab054e86bdf1ebf5ebdb63a65224def673d031aef2bb5a1cba05ac60215fdae8dfe640515b24715a657679257bbcc8d4bfe05f81b96e50dbed630ab0a325e70bed62b7d772f63fd1f7c0490c99f643b471f7e69b\",\"randomencode\":\"BDNEX58zfPjVSir2UWp1Yc2hl/GhbfA/s8nRkKAk6t+dyhUmGaYGY92hyY4g/aHanEMPyiNAaupN7NN2d2hhi1kdE8KibqIFpHW66xHNg5AR2GYfrfbLXDF0Rw7+SjFOCMj+x7OcPHk64Izh4ox8HUkQotq29btb1I8pKhu90URX\",\"pubkeymd5\":\"uFlXUvqiXu6S2sACDZ3xMQ==\"}","result":"00","result_detail":"0000000","result_msg":"","result_time":"20200430175716","version":"2.0.0"}

解密身份信息参考代码


public static void main(String[] args) throws NoSuchAlgorithmException, InvalidKeySpecException {

    String privateKey = ""; //填写P10私钥,用于解密信息
    PKCS8EncodedKeySpec keySpecB = new PKCS8EncodedKeySpec(Base64.decodeBase64(privateKey));
     KeyFactory keyFactoryB = KeyFactory.getInstance("EC",new BouncyCastleProvider());
     PrivateKey pkB = keyFactoryB.generatePrivate(keySpecB);
     String randomencode = "";//填写随机数密文
     String random = SM2Utils.decrypt(randomencode, pkB); //解密随机数密文        
     System.out.println("随机数明文:" + random);
     String infoencode = "";//填写身份密文信息
     
     dexECB(infoencode, random);//ECB解密身份信息
  //   dexCBC(infoencode, random);  //CBC解密身份信息
}

提示信息×

申请已通过,确认邮件已发送至您的邮箱。请打开邮件后点击链接完成应用注册。