身份证接口调用流程

当把SDK集成到开发环境之后,您还需要设置相关参数等操作。身份证扫描参数与银行卡扫描参数有所不同。您需要根据您的需求,选择对应的参数设置方法。

当您需要扫描银行卡时,请参考银行卡接口调用流程

1.选定扫描界面,设置参数

使用OCR SDK扫描身份证前,您需要设置相关的参数,具体操作如下:

身份证扫描场景有3种模式可供选择,分别是:扫描正面扫描反面连续扫描正反面。您可以选择您所需要的模式,具体操作请参考代码。

扫描正面

    /*识别身份证正面*/
    Intent scanIntent = new Intent(this, IDCardActivity.class);
    scanIntent.putExtra(IDCardActivity.EXTRA_BACK_DRAWABLE_ID, R.mipmap.icon_scan_back);
    //设置身份证扫描类型
    scanIntent.putExtra(IDCardActivity.EXTRA_RECOGNIZE_MODE, LFIDCard.FRONT);
    //设置身份证扫描文字
    scanIntent.putExtra(IDCardActivity.EXTRA_SCAN_TIPS,"请将身份证正面放入扫描框内");
    //标题栏标题
    scanIntent.putExtra(IDCardActivity.EXTRA_SCAN_TITLE, "请扫描身份证");
    // 设置扫描界面方向为竖直,设备头部朝上
    scanIntent.putExtra(IDCardActivity.EXTRA_SCAN_ORIENTATION, IDCardActivity.ORIENTATION_PORTRAIT);
    // 设置需要返回原图
    scanIntent.putExtra(IDCardActivity.EXTRA_CARD_IMAGE, true);
    //扫描取景框边界颜色
    scanIntent.putExtra(IDCardActivity.EXTRA_SCAN_GUIDE_COLOR, Color.parseColor("#78FFFFFF"));
    //设置扫描的超时时间,单位秒
    scanIntent.putExtra(IDCardActivity.EXTRA_SCAN_TIME_OUT, 30);
    //设置是否开启自动对焦,默认不开启
    scanIntent.putExtra(IDCardActivity.EXTRA_SCAN_AUTO_FOCUS, false);
    //设置是否开启扫描光标
    scanIntent.putExtra(IDCardActivity.EXTRA_SCAN_LINE_STATUS, true);

扫描反面

    /*识别身份证反面*/
    Intent scanIntent = new Intent(this, IDCardActivity.class);
    scanIntent.putExtra(IDCardActivity.EXTRA_BACK_DRAWABLE_ID, R.mipmap.icon_scan_back);
    //设置身份证扫描类型
    scanIntent.putExtra(IDCardActivity.EXTRA_RECOGNIZE_MODE, LFIDCard.BACK);
    //设置身份证扫描文字
    scanIntent.putExtra(IDCardActivity.EXTRA_SCAN_TIPS,"请将身份证反面放入扫描框内");
    //标题栏标题
    scanIntent.putExtra(IDCardActivity.EXTRA_SCAN_TITLE, "请扫描身份证");
    // 设置扫描界面方向为竖直,设备头部朝上
    scanIntent.putExtra(IDCardActivity.EXTRA_SCAN_ORIENTATION, IDCardActivity.ORIENTATION_PORTRAIT);
    // 设置需要返回原图
    scanIntent.putExtra(IDCardActivity.EXTRA_CARD_IMAGE, true);
    //扫描取景框边界颜色
    scanIntent.putExtra(IDCardActivity.EXTRA_SCAN_GUIDE_COLOR, Color.parseColor("#78FFFFFF"));
    //设置扫描的超时时间,单位秒
    scanIntent.putExtra(IDCardActivity.EXTRA_SCAN_TIME_OUT, 30);
    //设置是否开启自动对焦,默认不开启
    scanIntent.putExtra(IDCardActivity.EXTRA_SCAN_AUTO_FOCUS, false);
    //设置是否开启扫描光标
    scanIntent.putExtra(IDCardActivity.EXTRA_SCAN_LINE_STATUS, true);

连续扫描正反面

    /*连续扫描正反面模式*/
    Intent scanIntent = new Intent(this, IDCardBothActivity.class);
    scanIntent.putExtra(IDCardBothActivity.EXTRA_BACK_DRAWABLE_ID, R.mipmap.icon_scan_back);
    //设置身份证扫描类型
    scanIntent.putExtra(IDCardBothActivity.EXTRA_RECOGNIZE_MODE, LFIDCard.FRONT);
    //设置身份证扫描文字
    scanIntent.putExtra(IDCardBothActivity.EXTRA_SCAN_TIPS,"请将身份证正面放入扫描框内");
    //标题栏标题
    scanIntent.putExtra(IDCardBothActivity.EXTRA_SCAN_TITLE, "请扫描身份证");
    // 设置扫描界面方向为竖直,设备头部朝上
    scanIntent.putExtra(IDCardBothActivity.EXTRA_SCAN_ORIENTATION, IDCardBothActivity.ORIENTATION_PORTRAIT);
    // 设置需要返回身份证正面取景框的身份证图像 
    scanIntent.putExtra(IDCardBothActivity.KEY_FRONT_CAMERA_APERTURE_BITMAP, true);
    // 设置需要返回身份证反面取景框的身份证图像
    scanIntent.putExtra(IDCardBothActivity.KEY_BACK_CAMERA_APERTURE_BITMAP, true);
    //设置是否开启扫描光标
    scanIntent.putExtra(IDCardBothActivity.EXTRA_SCAN_LINE_STATUS, true);
    //扫描取景框边界颜色
    scanIntent.putExtra(IDCardBothActivity.EXTRA_SCAN_GUIDE_COLOR, Color.parseColor("#78FFFFFF"));
    //设置扫描的超时时间,单位秒
    scanIntent.putExtra(IDCardBothActivity.EXTRA_SCAN_TIME_OUT, 30);
    //设置是否开启自动对焦,默认不开启
    scanIntent.putExtra(IDCardBothActivity.EXTRA_SCAN_AUTO_FOCUS, false);

自定义界面

    /*自定义界面*/
    Intent scanIntent = new Intent(this, MyIDCardActivity.class);
    scanIntent.putExtra(MyIDCardActivity.EXTRA_BACK_DRAWABLE_ID, R.mipmap.icon_scan_back);
    //设置身份证扫描类型
    scanIntent.putExtra(MyIDCardActivity.EXTRA_RECOGNIZE_MODE, LFIDCard.FRONT);
    //设置身份证扫描文字
    scanIntent.putExtra(MyIDCardActivity.EXTRA_SCAN_TIPS,"请将身份证正面放入扫描框内");
    //标题栏标题
    scanIntent.putExtra(MyIDCardActivity.EXTRA_SCAN_TITLE, "自定义界面");
    // 设置扫描界面方向为竖直,设备头部朝上
    scanIntent.putExtra(MyIDCardActivity.EXTRA_SCAN_ORIENTATION, IDCardBothActivity.ORIENTATION_PORTRAIT);
    // 设置需要返回身份证正面取景框的身份证图像
    scanIntent.putExtra(MyIDCardActivity.KEY_FRONT_CAMERA_APERTURE_BITMAP, true);
    // 设置需要返回身份证反面取景框的身份证图像
    scanIntent.putExtra(MyIDCardActivity.KEY_BACK_CAMERA_APERTURE_BITMAP, true);
    //设置是否开启扫描光标
    scanIntent.putExtra(MyIDCardActivity.EXTRA_SCAN_LINE_STATUS, true);
    //扫描取景框边界颜色
    scanIntent.putExtra(MyIDCardActivity.EXTRA_SCAN_GUIDE_COLOR, Color.parseColor("#78FFFFFF"));
    //设置扫描的超时时间,单位秒
    scanIntent.putExtra(MyIDCardActivity.EXTRA_SCAN_TIME_OUT, 30);
    //设置是否开启自动对焦,默认不开启
    scanIntent.putExtra(MyIDCardActivity.EXTRA_SCAN_AUTO_FOCUS, false);

竖屏扫描框位置微调

/**竖屏模式下支持扫描框位置微调
 * *通过设置参数IDCardActivity.EXTRA_SCAN_RECT_OFFSET(int)微调位置
 * *阈值为-75到75;+75表示向上移动的最大值,-75表示向下移动的最大值
**/
scanIntent.putExtra(IDCardActivity.EXTRA_SCAN_RECT_OFFSET, scanRectOffset);

2.启动扫描界面

//启动扫描界面
startActivityForResult(scanIntent, EXAMPLE_REQUEST_CODE);

此处EXAMPLE_REQUEST_CODE的取值如下:

扫描正面:LFMainActivity.LF_SCAN_ID_CARD_FRONT_REQUEST,值为100<br>
扫描反面:LFMainActivity.LF_SCAN_ID_CARD_BACK_REQUEST,值为101<br>
连续扫描正反面:LFMainActivity.LF_SCAN_ID_CARD_BOTH_REQUEST,值为102<br>
自定义界面:LFMainActivity.LF_SCAN_ID_CARD_CUSTOM_REQUEST,值为104<br>

3.返回码处理

//扫描成功。可按"4.获取数据"部分处理结果
case IDCardActivity.RESULT_CARD_INFO

//相机授权失败。请在设置中打开相机权限或动态请求相机权限
case IDCardActivity.RESULT_CAMERA_NOT_AVAILABLE

//扫描取消。
case Activity.RESULT_CANCELED

//扫描超时。超时自动退出了扫描界面
case BankCardActivity.RESULT_RECOGNIZER_FAIL_SCAN_TIME_OUT

4. 获取数据

获取身份证正面结果:

private Object getReturnResult(String key) {
        Object data = LFIntentTransportData.getInstance().getData(key);
        LFIntentTransportData.getInstance().removeData(key);
        return data;
}

LFIDCard idcard =
 (LFIDCard) getReturnResult(IDCardActivity.EXTRA_SCAN_RESULT);
//设置为返回原图时,获取图片数据
byte[] imageBytes = (byte[]) getReturnResult(IDCardActivity.EXTRA_CARD_IMAGE);

String name=idcard.getName();//使用idcard.getName()获取姓名
String sex=idcard.getSex();//使用idcard.getSex ()获取性别
String race=idcard.getNation();//使用idcard.getNation ()获取民族
String birth=idcard.getYear()+"-"+idcard.getMonth()+"-"+idCard.getDay();//使用idcard.getYear(),idcard.getMonth(),idCard.getDay()获取出生日期
String address=idcard.getAddress();//使用idcard.getAddress ()获取住址
String idNumber=idcard.getNumber();//使用idcard.getNumber()获取身份证号

获取身份证反面结果:

LFIDCard idcard =
 (LFIDCard) getReturnResult(IDCardActivity.EXTRA_SCAN_RESULT);
//设置为返回原图时,获取图片数据
byte[] imageBytes = (byte[]) getReturnResult(IDCardActivity.EXTRA_CARD_IMAGE);

//使用idcard.getAuthority()获取签发机关
String issuingAuthority=idcard.getAuthority();

//使用idcard.getTimelimit()获取有限期限
String expirationDate=idcard.getTimelimit();

获取连续扫描正反面的结果:

//在IDCardBothActivity中自定义的返回LFIDCard的方式
LFIDCard idCardFrontResult = (LFIDCard) getReturnResult(IDCardBothActivity.KEY_FRONT_CARD_DATA);
LFIDCard idCardBackResult = (LFIDCard) getReturnResult(IDCardBothActivity.KEY_BACK_CARD_DATA);
//分别获取正面和反面原图
byte[] cameraApertureFrontImage = (byte[]) getReturnResult(IDCardBothActivity.KEY_FRONT_CAMERA_APERTURE_BITMAP);
byte[] cameraApertureBackImage = (byte[]) getReturnResult(IDCardBothActivity.KEY_BACK_CAMERA_APERTURE_BITMAP);
//获取正面数据(参考:获取身份证正面结果)
//获取反面数据(参考:获取身份证反面结果)

results matching ""

    No results matching ""