身份證OCR識別API接入實例詳解(Python?/?Java?示例)
前言
在很多互聯(lián)網(wǎng)應(yīng)用中,經(jīng)常需要對身份證信息進行自動識別,例如:
用戶實名認證
金融開戶
電商實名認證
政務(wù)系統(tǒng)資料錄入
傳統(tǒng)手動錄入效率低且容易出錯,而 身份證 OCR 識別 API 可以自動識別圖片中的身份證信息,大幅提升系統(tǒng)自動化能力。
本文將通過 Python 和 Java 示例,詳細介紹如何快速接入身份證 OCR 識別接口。
一、身份證 OCR 識別是什么
身份證 OCR(Optical Character Recognition)是一種 基于圖像識別技術(shù)的文字識別能力,可以自動從身份證圖片中提取關(guān)鍵信息,例如:
姓名 性別 民族 出生日期 身份證號 住址 簽發(fā)機關(guān) 有效期限 附加:身份證的頭像處理
開發(fā)者只需要上傳身份證圖片,OCR API 就可以返回結(jié)構(gòu)化 JSON 數(shù)據(jù)。
常見應(yīng)用場景:
用戶實名認證系統(tǒng)中的信息獲取
金融 KYC 認證
酒店入住登記
政務(wù)系統(tǒng)信息錄入
二、身份證 OCR API 接入流程
一般 OCR API 接入流程如下:
準(zhǔn)備身份證圖片
↓
圖片轉(zhuǎn) Base64
↓
調(diào)用 OCR API
↓
返回 JSON 識別結(jié)果
↓
解析字段信息
接口請求說明:
詳細接入可以參考說身份證OCR接入文檔:https://market.shiliuai.com/doc/id-card-ocr
請求地址(URL):
POST http(s)://ocr-api.shiliuai.com/api/id_card_ocr/v2
請求方式:POST
請求頭(Header):
| 參數(shù) | 類型 | 說明 |
|---|---|---|
| Authorization | string | 'APPCODE ' + 您的AppCode (注意英文空格) |
| Content-Type | string | application/json |
請求體(Body)
| 參數(shù) | 是否必填 | 類型 | 說明 |
|---|---|---|---|
| image_base64 | 必填 | string | base64編碼的圖片文件,像素范圍:[15,8192],小于20M |
| return_rectified_card | 選填 | bool | 是否返回裁剪并矯正的身份證圖片,默認為False |
| card_margin_ratio | 選填 | float | 裁剪時的邊距比例,等于邊距/長邊,默認為0 |
| card_width | 選填 | int | 裁剪后的證件圖片的寬度 |
| card_height | 選填 | int | 裁剪后的證件圖片的高度(如果card_width和card_height都不傳,或者都傳-1,那么用原圖中證件大小 如果其中一個>0, 另一個不傳或傳-1,那么表示該長度按比例縮放得到) |
| return_rectified_head | 選填 | bool | 是否返回裁剪并矯正的頭像圖片,默認為False,頭像圖片里,頭頂和上邊會有一些距離( 長寬比是441:358 ) |
| head_width | 選填 | int | 裁剪后的頭像圖片的寬度,如果head_width和head_height都不傳,或者都傳-1,那么用原圖中頭像大小,如果其中一個>0, 另一個不傳或傳-1,那么表示該長度按比例縮放得到 |
| head_height | 選填 | int | 裁剪后的頭像圖片的高度 |
返回信息
返回類型:
JSON
返回碼:
| 參數(shù)名 | 類型 | 說明 |
|---|---|---|
| code | int | 返回碼,0表示成功 |
| message | string | 返回信息 |
返回信息:
| 參數(shù) | 參數(shù)類型 | 說明 |
|---|---|---|
| code | int | 錯誤碼 |
| msg | string | 錯誤信息(英文) |
| msg_cn | string | 錯誤信息(中文) |
| success | bool | 識別是否成功 |
| image_id | string | 圖片ID |
| request_id | string | 唯一請求ID |
| data | data | 具體看下面 |
其中data信息:
| 參數(shù) | 參數(shù)類型 | 說明 | 舉例 |
|---|---|---|---|
| is_front | bool | 是否正面 | |
| complete_score | float | 完整度[0, 1] | 0.8 |
| is_complete | bool | 是否完整,當(dāng)complete_score==1時,為True | True |
| unoccluded_score | float | 無遮擋程度[0, 1] | |
| is_unoccluded | bool | 是否無遮擋,當(dāng)unoccluded_score>0.99時,為True | |
| clear_score | float | [0, 1],清晰度,用文字可識別度計算 | 0.9 |
| is_clear | bool | 是否清晰,當(dāng)clear_score>0.5時,為True | |
| rectified_card_base64 | string | 裁剪并矯正的身份證圖片, 當(dāng)return_rectified_card=True時有該項 | |
| rectified_head_base64 | string | 裁剪并矯正的頭像圖片, 當(dāng)return_rectified_head=True且是正面時有該項 |
返回示例:
{
"code": 200,
"msg": "success",
"msg_cn": "成功",
"success": true,
"image_id": "xxxx",
"request_id": "req_xxxx",
"data": {
"is_front": true,
"complete_score": 0.98,
"is_complete": true,
"clear_score": 0.92,
"is_clear": true,
"name": "張三",
"sex": "男",
"ethnicity": "漢",
"birthDate": "1990年01月01日",
"address": "北京市朝陽區(qū)XXX",
"idNumber": "110101199001011234"
}
}三、Python 調(diào)用身份證 OCR API 示例
首先安裝 Python 依賴:
pip install requests
示例代碼:
# API文檔:https://market.shiliuai.com/doc/id-card-ocr
# -*- coding: utf-8 -*-
import requests
import base64
import json
# 請求接口
URL = "https://ocr-api.shiliuai.com/api/id_card_ocr/v2"
# 圖片轉(zhuǎn)base64
def get_base64(file_path):
with open(file_path, 'rb') as f:
data = f.read()
b64 = base64.b64encode(data).decode('utf8')
return b64
def demo(appcode, file_path):
# 請求頭
headers = {
'Authorization': 'APPCODE %s' % appcode,
'Content-Type': 'application/json'
}
# 請求體
b64 = get_base64(file_path)
data = {"image_base64": b64}
# 請求
response = requests.post(url=URL, headers=headers, json=data)
content = json.loads(response.content)
print(content)
if __name__=="__main__":
appcode = "你的APPCODE"
file_path = "本地圖片路徑"
demo(appcode, file_path)四、Java 調(diào)用身份證 OCR API 示例
Java 可以使用 HttpURLConnection 或 OkHttp 調(diào)用接口。
示例代碼:
//=====================================================
// API文檔:https://market.shiliuai.com/doc/id-card-ocr
//=====================================================
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import org.apache.commons.io.FileUtils;
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.Base64;
public class Main {
public static String get_base64(String path) {
String b64 = "";
try {
// 使用Commons IO簡化文件讀取
byte[] content = FileUtils.readFileToByteArray(new File(path));
// 使用JDK自帶的Base64
b64 = Base64.getEncoder().encodeToString(content);
} catch (IOException e) {
e.printStackTrace();
}
return b64;
}
public static void main(String[] args) {
String url = "https://ocr-api.shiliuai.com/api/id_card_ocr/v2"; // 請求接口
String appcode = "你的APPCODE";
String imgFile = "本地圖片路徑";
Map headers = new HashMap<>();
headers.put("Authorization", "APPCODE " + appcode);
headers.put("Content-Type", "application/json");
// 請求體
JSONObject requestObj = new JSONObject();
requestObj.put("image_base64", get_base64(imgFile));
String bodys = requestObj.toString();
try (CloseableHttpClient httpClient = HttpClients.createDefault()) {
// 創(chuàng)建POST請求
HttpPost httpPost = new HttpPost(url);
// 設(shè)置請求頭
for (Map.Entry entry : headers.entrySet()) {
httpPost.addHeader(entry.getKey(), entry.getValue());
}
// 設(shè)置請求體
StringEntity entity = new StringEntity(bodys, "UTF-8");
httpPost.setEntity(entity);
// 執(zhí)行請求
HttpResponse response = httpClient.execute(httpPost);
int stat = response.getStatusLine().getStatusCode();
if (stat != 200) {
System.out.println("Http code: " + stat);
return;
}
String res = EntityUtils.toString(response.getEntity());
JSONObject res_obj = JSON.parseObject(res);
System.out.println(res_obj.toJSONString());
} catch (Exception e) {
e.printStackTrace();
}
}
}五、身份證 OCR 識別示例效果
示例身份證圖片:

識別結(jié)果:

開發(fā)者可以直接將返回 JSON 存入數(shù)據(jù)庫或用于實名認證流程。
六、身份證 OCR 識別常見問題
1 圖片模糊識別率低
建議:
分辨率 ≥ 800px
避免反光
身份證完整入鏡
2 身份證傾斜
可以在識別前做簡單圖像處理:
自動旋轉(zhuǎn)
邊緣檢測
裁剪身份證區(qū)域
3 批量識別效率問題
對于批量識別場景,可以:
使用多線程調(diào)用 API
異步隊列處理
批量任務(wù)系統(tǒng)
七、在線體驗身份證 OCR
如果想快速測試身份證識別效果,可以先通過在線工具進行測試,然后再接入 API。
在線體驗:https://market.shiliuai.com/id-card-ocr
支持:
身份證正面識別
身份證反面識別
自動信息提取
人像提取與優(yōu)化調(diào)整操作
開發(fā)者可以根據(jù)測試效果再接入 API。
八、總結(jié)
身份證 OCR 是 OCR 技術(shù)中非常常見的應(yīng)用場景,通過 API 接口可以快速實現(xiàn):
用戶實名認證
自動信息錄入
身份證信息提取
本文介紹了 身份證 OCR API 接入流程,并提供 Python 和 Java 示例代碼,開發(fā)者可以根據(jù)自己的項目需求快速接入。
如果你正在開發(fā) 實名認證系統(tǒng)、金融系統(tǒng)或自動化信息錄入系統(tǒng),OCR API 可以大幅減少人工輸入成本,提高系統(tǒng)效率。
到此這篇關(guān)于身份證OCR識別API接入的文章就介紹到這了,更多相關(guān)身份證OCR識別API接入內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用Python創(chuàng)建一個簡單的任務(wù)管理器應(yīng)用程序
本文主要介紹了使用Python創(chuàng)建一個簡單的任務(wù)管理器應(yīng)用程序,這個應(yīng)用程序?qū)⒃试S用戶添加、編輯、刪除和完成任務(wù),具有一定的參考價值,感興趣的可以了解一下2024-05-05
跟老齊學(xué)Python之大話題小函數(shù)(1)
今天本講要講什么呢?今天要介紹幾個python中的小函數(shù),這幾個函數(shù)都是從函數(shù)式編程借鑒過來的,它們就是:filter、map、reduce、lambda、yield 有了它們,最大的好處是程序更簡潔2014-10-10
Python基于python-docx實現(xiàn)的本科畢業(yè)論文自動排版工具
寫本科畢業(yè)論文的時候,你是不是也遇到過這些崩潰的問題:改格式改到凌晨?標(biāo)題、正文、圖表、頁眉頁腳,調(diào)了半天還是不符合學(xué)校要求?今天給大家分享一個我寫的本科畢業(yè)論文自動生成工具,基于python-docx實現(xiàn),一鍵生成標(biāo)準(zhǔn)格式論文,需要的朋友可以參考下2026-06-06
python實現(xiàn)得到一個給定類的虛函數(shù)
這篇文章主要介紹了python實現(xiàn)得到一個給定類的虛函數(shù)的方法,以wx的PyPanel類為例講述了打印以base_開頭的方法的實例,需要的朋友可以參考下2014-09-09

