身份证云识别服务(即将上线)

对接调试一共分为两部分,一部分为安卓应用对接的SDK,另一部分为应用服务器与商米服务器直接的云对接API。

应用软件集成身份证识别sdk,应用软件后端服务器集成云端api(集成云端api用于保护用户身份信息,保证整个数据链路中,只有应用软件可获取身份证明文信息)

1、安卓SDK

身份证云识别的Android SDK 的集成、初始化、使用流程等。

1.1、集成

资源文件( 解压文件夹 AAR 包文件,X.X.X 表示对应的版本号) :

正式坏境:aar/SunmiEID-SDK_vX.X.X-release.aar

测试环境:aar/SunmiEID-SDK_vX.X.X-tes.aar

1.2、导入AAR包

打开项目后:File -> New -> New Module…

在新的对话框:New Module -> Import .JAR/.AAR Package -> Next

下一步:Import Module from Library -> 选择 aar 文件夹下的 SunmiEID-SDK_vX.X.X-release/tes.aar 文件 -> Finish

完成:

1.3、app 模块引用

点击-打开模块设置:

设置对话框:选择“app” -> 点击“+”号 ->  选择“Module Dependency”

显示:勾选上对应的模块(SunmiEID-SDK_vX.X.X-release/tes)-> 点击“OK”,相关SDK引用成功。

1.4、接口文档

1.4.1、初始化

推荐在Application实现SDK初始化实现:

public class IApp extends Application implements EidCall {
    @Override
    public void onCreate() {
        super.onCreate();
        try {
            EidSDK.init(this, "appid", this);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Override
    public void onTerminate() {
        super.onTerminate();
        EidSDK.destroy();
    }

    @Override
    public void onCallData(int code, String msg) {
        Log.d("app", "onCallData: code:" + code + ", msg:" + msg);
    }
}

1.4.2、获取 EidReader 实例

private void initEidReader() {
    Log.d("Eid", String.format("商米SDK.Ver:%s, 读卡模块Ver:%s", EidSDK.getSunmiEidSDKVersion(), EidSDK.getEidSDKVersion()));
    EidPic.init(this, fileNameBase);
    eid = EidSDK.getEidReaderForNfc(1, this);
}

1.4.3、实现 EidCall 接口

@Override
public void onCallData(int code, String msg) {
    switch (code) {
        case EidConstants.READ_CARD_START:
            mState.setText("开始读卡,请勿移动");
            Log.i(TAG, "开始读卡,请勿移动");
            break;
        case EidConstants.READ_CARD_SUCCESS:
            closeNFCReader();//电子身份证需要关闭
            Log.e("TAG", String.format(Locale.getDefault(), "正在获取身份信息(%s),请稍等.....", msg));
            mState.setText(String.format(Locale.getDefault(), "正在获取身份信息(%s),请稍等.....", msg));
            File file = new File(fileNameBase, "zp.bmp");
            if (file.exists()) {
                file.deleteOnExit();
            }
            getIDCardInfo(msg); //通过card_id请求识读卡片的信息
            break;
        case EidConstants.READ_CARD_FAILED:
            closeNFCReader();//电子身份证需要关闭
            Log.i(TAG, String.format(Locale.getDefault(), "读卡错误,请重新贴卡:%s", msg));
            mState.setText(String.format(Locale.getDefault(), "读卡错误,请重新贴卡:%s", msg));
            break;
        case EidConstants.READ_CARD_DELAY:
            Log.e("TAG", String.format(Locale.getDefault(), "延迟 %sms", msg));
            mState.setText(String.format(Locale.getDefault(), "延迟 %sms", msg));
            break;
        default:
            break;
    }
}

1.4.4、调用NFC识读卡片

识读身份证:

@Override
protected void onNewIntent(Intent intent) {
    super.onNewIntent(intent);
    eid.nfcReadCard(intent);
 }

识读电子身份证:

@Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
        try {
           Tag tagFromIntent = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
           try {
              isodep = IsoDep.get(tagFromIntent);
              isodep.connect();
              if (isodep.isConnected()) {
                  eid.readCard(IDCardType.ECCARD, new EidReadCardCallBack() {
                      @Override
                      public byte[] transceiveTypeB(byte[] data) {
                          return data;
                      }
                      @Override
                      public byte[] transceiveTypeA(byte[] data) {
                          byte[] outData = new byte[data.length];
                          try {
                              outData = isodep.transceive(data);
                          } catch (Exception e) {
                              e.printStackTrace();
                          }
                          return outData;
                      }
                  });
             } else {
                  closeNFCReader()
             }
        } catch (Exception e) {
             e.printStackTrace();
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
 }

    private void closeNFCReader() {
        if (isodep != null) {
            try {
                isodep.close();
                isodep = null;
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

1.5、NFC及动态授权相关

详细处理参考:ReadCardDemo.zip

1.6、详细接口说明

详细接口文档:Javadoc.zip

1.7、错误码ErrorCode

2、云对接API

身份证云识别

产品与服务介绍

1、身份证云识别

身份证件在入住、出行、金融、医疗等各个领域被广泛用于用户身份核实。传统的证件识别方式是通过专用证件阅读器验证身份证件,以确保登记信息的真实性和准确性,但存在着成本较高;体积较大,不易于携带;专用证件阅读器直接识别出来的证件信息是明文信息,在传输过程中容易被盗取或篡改,不适合直接在互联网中传输等问题。电子身份证件云识读服务可以解决以上问题,现免费向出行、入住、政务民生、金融、医疗等行业的应用机构提供。

2、什么是电子身份证件云识读服务?

在支持NFC功能的手机中,APP应用系统中通过商米提供的SDK读取二代身份证的加密数据,并发送到公安部身份证云解码中心进行解码和身份认证,然后将解码结果(身份证号码和姓名等信息)返回给应用系统,完成对用户身份信息的认证。

3、电子身份证件云识读服务支持哪些证件?

第二代居民身份证、港澳台居民居住证、外国人永久居留证、护照、eID身份电子证照。

4、电子身份证件云识读服务支持哪些终端?

支持NFC的(支持ISO14443协议的)设备:L2、L2K、V2pro、T1mini、T2mini、带NFC的刷卡器

5、电子身份证件云识读服务的套餐类型?

1、按次数购买,有效期1年

2、包年购买:为账号购买包年的套餐,一个账号下只能有一个包年套餐。用户可以选择包年的时长以及需要服务的设备名额。购买后,用户可以为包年套餐续费、增加名额和导入设备号。导入设备号后,对应设备号就拥有了有效期内无限使用身份证识别的功能。

使用指南

1、接入流程

1、注册为商米合作伙伴

2、购买身份证服务套餐

3、应用和应用服务器集成云识别sdk

4、在合作伙伴平台查看和管理服务