快捷支付涉及到方方面面,同時安全問題既是用戶所關心的,也是製做者不容忽視的重要部分。 好比涉及到支付和金錢的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展菲