身份证接口调用流程
当把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);
//获取正面数据(参考:获取身份证正面结果)
//获取反面数据(参考:获取身份证反面结果)