快捷支付涉及到方方面面,同时安全问题既是用户所关心的,也是制做者不容忽视的重要部分。 好比涉及到支付和金钱的app,商户端app等等,都须要进行实名认证,实名认证能够经过银行卡认证和身份证认证。 一般办法是经过上传照片,而且手动输入基本信息进行认证,这种方法不只操做复杂,并且容易出错。 网上不少资源,识别率低,速度慢,用户体验不好。今天我就和你们介绍一下我使用的方法,能够快速、高效的识别中国身份证信息。android
在拍摄框中右上区域加了一我的像区域提示框,并将该区域设为扫描人脸的区域,只有该区域扫描到身份证上的人脸时(确保用户的确将身份证人像对准了拍摄框中的人像框),才执行读取身份证信息的操做。git
扫描身份证面截图github
信息展现页面安全
因为使用的是百度云的图像文字识别sdk,首先须要去百度云管理控制台 得到API Key / Secret Key。微信
首先要在顶层工程目录下的settings.gradle文件中include模块名markdown
include ':app',':identify'
复制代码
而后直接复制粘贴identify文件导入到项目的文件夹中!!!而后Build>Rebuild Project,从新构建项目。app
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
复制代码
-keep class com.baidu.ocr.sdk.**{*;}
-dontwarn com.baidu.ocr.**
复制代码
OCR.getInstance().initAccessTokenWithAkSk(new OnResultListener<AccessToken>() {
@Override
public void onResult(AccessToken result) {
}
@Override
public void onError(OCRError error) {
error.printStackTrace();
Log.d("onError", "msg: " + error.getMessage());
}
}, getApplicationContext(), "你注册的appkey", "你注册的sk");
复制代码
Intent intent = new Intent(MainActivity.this, CameraActivity.class);
intent.putExtra(CameraActivity.KEY_OUTPUT_FILE_PATH,
FileUtil.getSaveFile(getApplication()).getAbsolutePath());
intent.putExtra(CameraActivity.KEY_CONTENT_TYPE, CameraActivity.CONTENT_TYPE_ID_CARD_FRONT);
startActivityForResult(intent, REQUEST_CODE_CAMERA);
复制代码
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_CODE_CAMERA && resultCode == Activity.RESULT_OK) {
if (data != null) {
String contentType = data.getStringExtra(CameraActivity.KEY_CONTENT_TYPE);
String filePath = FileUtil.getSaveFile(getApplicationContext()).getAbsolutePath();
if (!TextUtils.isEmpty(contentType)) {
if (CameraActivity.CONTENT_TYPE_ID_CARD_FRONT.equals(contentType)) {
recIDCard(IDCardParams.ID_CARD_SIDE_FRONT, filePath);
} else if (CameraActivity.CONTENT_TYPE_ID_CARD_BACK.equals(contentType)) {
recIDCard(IDCardParams.ID_CARD_SIDE_BACK, filePath);
}
}
}
}
}
复制代码
private void recIDCard(String idCardSide, String filePath) {
IDCardParams param = new IDCardParams();
param.setImageFile(new File(filePath));
param.setIdCardSide(idCardSide);
param.setDetectDirection(true);
OCR.getInstance().recognizeIDCard(param, new OnResultListener<IDCardResult>() {
@Override
public void onResult(IDCardResult result) {
if (result != null) {
Log.d("onResult", "result: " + result.toString());
}
}
@Override
public void onError(OCRError error) {
Log.d("onError", "error: " + error.getMessage());
}
});
}
复制代码
到此身份证识别接入就结束了!!!eclipse
相同方式都可实现银行卡识别、驾驶证识别、行驶证识别、车牌识别、营业执照识别等等,若有须要demo可联系我。ide
关注 【网罗开发】微信公众号,回复【162】即可领取。 网罗天下方法,方便你我开发,更多iOS技术干货等待领取,全部文档会持续更新,欢迎关注一块儿成长!函数
但愿能够帮助你们, 若有问题可加QQ技术交流群: 591625129。
若是哪里有什么不对或者不足的地方,还望读者多多提意见或建议。 如需转载请联系我,通过受权方可转载,谢谢
本篇已同步到我的博客:FBY展菲