在很多互联网应用中,经常需要对身份证信息进行自动识别,例如:
-
用户实名认证
-
金融开户
-
电商实名认证
-
政务系统资料录入
传统手动录入效率低且容易出错,而 身份证 OCR 识别 API 可以自动识别图片中的身份证信息,大幅提升系统自动化能力。
本文将通过 Python 和 Java 示例,详细介绍如何快速接入身份证 OCR 识别接口。
一、身份证 OCR 识别是什么
身份证 OCR(Optical Character Recognition)是一种 基于图像识别技术的文字识别能力,可以自动从身份证图片中提取关键信息,例如:
姓名
性别
民族
出生日期
身份证号
住址
签发机关
有效期限
附加:身份证的头像处理
开发者只需要上传身份证图片,OCR API 就可以返回结构化 JSON 数据。
常见应用场景:
-
用户实名认证系统中的信息获取
-
金融 KYC 认证
-
酒店入住登记
-
政务系统信息录入
二、身份证 OCR API 接入流程
一般 OCR API 接入流程如下:
准备身份证图片
↓
图片转 Base64
↓
调用 OCR API
↓
返回 JSON 识别结果
↓
解析字段信息

接口请求说明:
详细接入可以参考说身份证OCR接入文档:https://market.shiliuai.com/doc/id-card-ocr
请求地址(URL):
POST http(s)://ocr-api.shiliuai.com/api/id_card_ocr/v2
请求方式:POST
请求头(Header):
| 参数 | 类型 | 说明 |
|---|---|---|
| Authorization | string | 'APPCODE ' + 您的AppCode (注意英文空格) |
| Content-Type | string | application/json |
请求体(Body)
| 参数 | 是否必填 | 类型 | 说明 |
|---|---|---|---|
| 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
返回码:
| 参数名 | 类型 | 说明 |
|---|---|---|
| code | int | 返回码,0表示成功 |
| message | string | 返回信息 |
返回信息:
| 参数 | 参数类型 | 说明 |
|---|---|---|
| code | int | 错误码 |
| msg | string | 错误信息(英文) |
| msg_cn | string | 错误信息(中文) |
| success | bool | 识别是否成功 |
| image_id | string | 图片ID |
| request_id | string | 唯一请求ID |
| data | data | 具体看下面 |
其中data信息:
| 参数 | 参数类型 | 说明 | 举例 |
|---|---|---|---|
| is_front | bool | 是否正面 | |
| complete_score | float | 完整度[0, 1] | 0.8 |
| is_complete | bool | 是否完整,当complete_score==1时,为True | True |
| unoccluded_score | float | 无遮挡程度[0, 1] | |
| is_unoccluded | bool | 是否无遮挡,当unoccluded_score>0.99时,为True | |
| clear_score | float | [0, 1],清晰度,用文字可识别度计算 | 0.9 |
| is_clear | bool | 是否清晰,当clear_score>0.5时,为True | |
| rectified_card_base64 | string | 裁剪并矫正的身份证图片, 当return_rectified_card=True时有该项 | |
| rectified_head_base64 | string | 裁剪并矫正的头像图片, 当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": "北京市朝阳区XXX",
"idNumber": "110101199001011234"
}
}
三、Python 调用身份证 OCR API 示例
首先安装 Python 依赖:
pip install requests
示例代码:
python
# 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"
# 图片转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 调用身份证 OCR API 示例
Java 可以使用 HttpURLConnection 或 OkHttp 调用接口。
示例代码:
java
//=====================================================
// 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()) {
// 创建POST请求
HttpPost httpPost = new HttpPost(url);
// 设置请求头
for (Map.Entry entry : headers.entrySet()) {
httpPost.addHeader(entry.getKey(), entry.getValue());
}
// 设置请求体
StringEntity entity = new StringEntity(bodys, "UTF-8");
httpPost.setEntity(entity);
// 执行请求
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 识别示例效果
示例身份证图片:

识别结果:

开发者可以直接将返回 JSON 存入数据库或用于实名认证流程。
六、身份证 OCR 识别常见问题
1 图片模糊识别率低
建议:
-
分辨率 ≥ 800px
-
避免反光
-
身份证完整入镜
2 身份证倾斜
可以在识别前做简单图像处理:
-
自动旋转
-
边缘检测
-
裁剪身份证区域
3 批量识别效率问题
对于批量识别场景,可以:
-
使用多线程调用 API
-
异步队列处理
-
批量任务系统
七、在线体验身份证 OCR
如果想快速测试身份证识别效果,可以先通过在线工具进行测试,然后再接入 API。
在线体验:https://market.shiliuai.com/id-card-ocr
支持:
-
身份证正面识别
-
身份证反面识别
-
自动信息提取
-
人像提取与优化调整操作
开发者可以根据测试效果再接入 API。
八、总结
身份证 OCR 是 OCR 技术中非常常见的应用场景,通过 API 接口可以快速实现:
-
用户实名认证
-
自动信息录入
-
身份证信息提取
本文介绍了 身份证 OCR API 接入流程,并提供 Python 和 Java 示例代码,开发者可以根据自己的项目需求快速接入。
如果你正在开发 实名认证系统、金融系统或自动化信息录入系统,OCR API 可以大幅减少人工输入成本,提高系统效率。