身份证接口调用流程

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

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

1.选定扫描界面

Intent scanIntent = new Intent(MainActivity.this, IDCardActivity.class);

2.身份证扫描参数设置

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

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

//连续扫描正反面模式
if(v == mBtnIDCardFrontAndBack){
    scanIntent = new Intent(MainActivity.this, IDCardBothActivity.class);
    scanIntent.putExtra(IDCardActivity.EXTRA_BACK_DRAWABLE_ID, R.drawable.scan_back);
    scanIntent.putExtra(IDCardActivity.EXTRA_RECOGNIZE_MODE, IDCardRecognizer.Mode.FRONT);
    // 设置显示在扫描界面的提示语
    scanIntent.putExtra(IDCardActivity.EXTRA_SCAN_TIPS, "请将身份证正面放入扫描框内");
    //设置返回正面裁剪图
    scanIntent.putExtra(IDCardActivity.EXTRA_CARD_IMAGE_FRONT_RECTIFIED, true);
    //设置返回正面原图,仅在连续扫描正反面模式时有效。此模式下返回正面原图使用EXTRA_CARD_IMAGE_FRONT,反面原图使用EXTRA_CARD_IMAGE
    //scanIntent.putExtra(IDCardActivity.EXTRA_CARD_IMAGE_FRONT, true);
}

//自定义界面
else if(v == mBtnIDCardUser){
    scanIntent = new Intent(MainActivity.this, MyIDCardActivity.class);
    scanIntent.putExtra(IDCardActivity.EXTRA_BACK_DRAWABLE_ID, R.drawable.scan_back_user);
    scanIntent.putExtra(IDCardActivity.EXTRA_RECOGNIZE_MODE,IDCardRecognizer.Mode.FRONT);
}else{
    scanIntent = new Intent(MainActivity.this, IDCardActivity.class);
    scanIntent.putExtra(IDCardActivity.EXTRA_BACK_DRAWABLE_ID, R.drawable.scan_back);
}

//识别身份证正面
if (v == mBtnIDCardFront) {
    scanIntent.putExtra(IDCardActivity.EXTRA_RECOGNIZE_MODE, IDCardRecognizer.Mode.FRONT);
    // 设置需要返回身份证人脸截图
    scanIntent.putExtra(IDCardActivity.EXTRA_IDCARD_FACE, true);
    scanIntent.putExtra(IDCardActivity.EXTRA_SCAN_TIPS, "请将身份证正面放入扫描框内");
} 

//识别身份证反面
else if (v == mBtnIDCardBack) {
    iv_face.setImageBitmap(null);
    scanIntent.putExtra(IDCardActivity.EXTRA_RECOGNIZE_MODE, IDCardRecognizer.Mode.BACK);
    scanIntent.putExtra(IDCardActivity.EXTRA_SCAN_TIPS, "请将身份证反面放入扫描框内");
}

//设置为快速扫描姓名和身份证号
} else if (v == mBtnIDCardNameAndNum) {
    scanIntent.putExtra(IDCardActivity.EXTRA_RECOGNIZE_MODE, IDCardRecognizer.Mode.FRONT);
    // 设置只需要识别身份证号和姓名
    scanIntent.putExtra(IDCardActivity.EXTRA_RECOGNIZE_FLAG,
    IDCardRecognizer.RECOGNIZE_FLAG_ID | IDCardRecognizer.RECOGNIZE_FLAG_NAME);
    scanIntent.putExtra(IDCardActivity.EXTRA_IDCARD_FACE, true);
    scanIntent.putExtra(IDCardActivity.EXTRA_SCAN_TIPS, "请将身份证正面放入扫描框内");
    only_name_id = true;
}

// 设置扫描界面方向为竖直,设备头部朝上
scanIntent.putExtra(IDCardActivity.EXTRA_SCAN_ORIENTATION,IDCardActivity.ORIENTATION_PORTRAIT);
// 设置需要返回裁剪后的身份证图像
scanIntent.putExtra(IDCardActivity.EXTRA_CARD_IMAGE_RECTIFIED, true);
// 设置需要返回原图。若为正反面连续扫描时,使用EXTRA_CARD_IMAGE返回的是反面图像
//scanIntent.putExtra(IDCardActivity.EXTRA_CARD_IMAGE, true);

// 设置扫描过程中保存预览图的时间间隔,单位:秒,小于0关闭此功能,默认关闭
scanIntent.putExtra(IDCardActivity.EXTRA_PREVIEW_TIME_GAPS, 3);
// 设置预览图保存路径,如果打开保存预览图功能,必须设置此参数
scanIntent.putExtra(IDCardActivity.EXTRA_PREVIEW_STOREAGE_PATH, Environment.getExternalStorageDirectory().getAbsolutePath().toString());
// 设置保存的预览图个数,默认为3
// scanIntent.putExtra(IDCardActivity.EXTRA_PREVIEW_SAVED_NUM, 4);


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

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

IDCard idcard =
 data.getParcelableExtra(IDCardActivity.EXTRA_SCAN_RESULT);
//分别获取裁剪后的正面和反面图像
imageBytesFront = data.getByteArrayExtra(IDCardActivity.EXTRA_CARD_IMAGE_FRONT_RECTIFIED);
imageBytesBack = data.getByteArrayExtra(IDCardActivity.EXTRA_CARD_IMAGE_RECTIFIED);    
//分别获取正面和反面原图
//imageBytesFront = data.getByteArrayExtra(IDCardActivity.EXTRA_CARD_IMAGE_FRONT);    
//imageBytesBack = data.getByteArrayExtra(IDCardActivity.EXTRA_CARD_IMAGE);

//获取正面数据(参考:获取身份证正面结果)
//获取反面数据(参考:获取身份证反面结果)

获取身份证正面结果:

IDCard idcard =
 data.getParcelableExtra(IDCardActivity.EXTRA_SCAN_RESULT);
byte[] imageBytes = 
data.getByteArrayExtra(IDCardActivity.EXTRA_CARD_IMAGE_RECTIFIED);
//设置为返回裁剪图时,获取图片数据
byte[] imageBytes = data.getByteArrayExtra(IDCardActivity.EXTRA_CARD_IMAGE);
//设置为返回原图时,获取图片数据

String name=idcard.getStrName();//使用idcard.getStrName()获取姓名
String sex=idcard.getStrSex();//使用idcard. getStrSex ()获取性别
String race=idcard.getStrNation();//使用idcard. getStrNation ()获取民族
String birth= idcard.getStrDate();//使用idcard. getStrDate ()获取出生日期
String address=idcard.getStrAddress();//使用idcard. getStrAddress ()获取住址
String idNumber=idcard.getStrID();//使用idcard. getStrID ()获取身份证号

//下面两个方法获取的位置相对于裁剪后的身份证图片,需设置为IDCardActivity.EXTRA_CARD_IMAGE_RECTIFIED,返回值为int型数组,

int[] imgNameRect = idcard.getImgName();//获取姓名所在身份证图片上的位置
int[] imgNumRect = idcard.getImgID();//获取身份证号所在身份证图片上的位置

//picRes必须为SDK返回的裁剪后的图片,否则裁剪位置不准确
Bitmap imgName = Bitmap.createBitmap(picRes, imgNameRect.left, imgNameRect.top, imgNameRect.right-imgNameRect.left, imgNameRect.bottom-imgNameRect.top);//裁剪出姓名小图片

//picRes必须为SDK返回的裁剪后的图片,否则裁剪位置不准确
Bitmap imgNum = Bitmap.createBitmap(picRes, imgNumRect.left, imgNumRect.top, imgNumRect.right-imgNumRect.left, imgNumRect.bottom-imgNumRect.top);//裁剪出身份证号小图片

获取身份证反面结果:

IDCard idcard =
 data.getParcelableExtra(IDCardActivity.EXTRA_SCAN_RESULT);
byte[] imageBytes = 
data.getByteArrayExtra(IDCardActivity.EXTRA_CARD_IMAGE_RECTIFIED);
//设置为返回裁剪图时,获取图片数据
byte[] imageBytes = data.getByteArrayExtra(IDCardActivity.EXTRA_CARD_IMAGE);
//设置为返回原图时,获取图片数据

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

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

获取快速扫描姓名和号码结果:

IDCard idcard =
 data.getParcelableExtra(IDCardActivity.EXTRA_SCAN_RESULT);
byte[] imageBytes = 
data.getByteArrayExtra(IDCardActivity.EXTRA_CARD_IMAGE_RECTIFIED);
//设置为返回裁剪图时,获取图片数据
byte[] imageBytes = data.getByteArrayExtra(IDCardActivity.EXTRA_CARD_IMAGE);
//设置为返回原图时,获取图片数据

String name=idcard.getStrName();//使用idcard.getStrName()获取姓名
String idNumber=idcard.getStrID();//使用idcard. getStrID ()获取身份证号

//picRes必须为SDK返回的裁剪后的图片,否则裁剪位置不准确
Bitmap imgName = Bitmap.createBitmap(picRes, imgNameRect.left, imgNameRect.top, imgNameRect.right-imgNameRect.left, imgNameRect.bottom-imgNameRect.top);//裁剪出姓名小图片

//picRes必须为SDK返回的裁剪后的图片,否则裁剪位置不准确
Bitmap imgNum = Bitmap.createBitmap(picRes, imgNumRect.left, imgNumRect.top, imgNumRect.right-imgNumRect.left, imgNumRect.bottom-imgNumRect.top);//裁剪出身份证号小图片

3.启动扫描界面

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

4.返回码处理

//返回码为RESULT_SUCCESS时,扫描成功,按照2中的“获取返回结果”作相应处理
case IDCardActivity.RESULT_SUCCESS

//返回码为ERROR_CAMERA时,相机授权失败,请在设置中打开相机权限
case IDCardActivity.ERROR_CAMERA

//返回码为RESULT_CANCELED时,取消扫描
case IDCardActivity.RESULT_CANCELED

//返回码为RESULT_AUTHENTICATION_FAILED时,API账户验证错误,请检查网络以及您的API_ID和API_SECRET
case IDCardActivity.RESULT_AUTHENTICATION_FAILED

//返回码为ERROR_LICENSE_PACKAGE_NAME_MISMATCH时,绑定包名错误
case IDCardActivity.ERROR_LICENSE_PACKAGE_NAME_MISMATCH

//返回码为ERROR_LICENSE_EXPIRE时,授权文件过期
case IDCardActivity.ERROR_LICENSE_EXPIRE

//返回码为ERROR_LICENSE_FILE_NOT_FOUND时,授权文件不存在
case IDCardActivity.ERROR_LICENSE_FILE_NOT_FOUND

//返回码为ERROR_LICENSE_INVALID时,授权文件不合法
case IDCardActivity.ERROR_LICENSE_INVALID

//返回码为ERROR_MODEL_NOT_FOUND时,模型文件不存在
case IDCardActivity.ERROR_MODEL_NOT_FOUND

//返回码为ERROR_CHECK_MODEL_FAIL时,模型文件错误,请检查模型是否匹配或超过有效期
case IDCardActivity.ERROR_CHECK_MODEL_FAIL

完成上述操作之后,您就可以使用我们的产品了。

results matching ""

    No results matching ""