适用场景:从人工录入到自动化证件识别
在日常业务中,涉及台湾居民身份核验的环节常依赖人工扫描或手工录入台胞证信息,效率低且易出错。台胞证识别API通过OCR技术将证件图片中的5个关键字段(中文姓名、英文姓名、出生日期、证件号码、有效期)结构化输出,适用于以下典型场景:
- 台湾居民实名认证:电商、金融、社交平台在准备或敏感操作时需核验用户身份,将上传的台胞证图片经API识别后与用户填写信息比对,降低欺诈风险。
- 酒店入住登记:前文台胞入住酒店时,系统对接API自动提取证件信息填入入住登记表,减少前台操作时间。
- 证件信息自动录入:企业内部管理系统(如HR、访客系统)批量处理台胞证档案,通过API将纸质或电子版图片转换为结构化数据供后续归档。
接口能力边界:输入、输出与性能限制
理解能力边界是正确集成的前提。该API的设计围绕轻量、高精度的证件级OCR,存在以下限制:
1. 输入方式与格式限制
| 参数 | 允许值 | 说明 |
|---|---|---|
input_type | url/base64 | URL需指向公网可访问的图片;base64字符串建议小于10MB,否则可能超时 |
| 图片格式 | 仅jpg/png | 不支持gif、bmp、pdf等,若只有pdf需提前转码 |
| 图片质量 | 建议完整、清晰、无反光 | 倾斜超过15度或遮挡关键字段会导致识别失败或字段缺失 |
需要注意的是,input_type=base64时可以选择包含data:image/jpg;base64,前缀,但兼容性更好的是传入纯base64编码。前端若使用FileReader生成base64,直接传入即可。
2. 输出字段及可靠性边界
API返回的data对象严格限定为以下5个字段:
full_name_cn:中文姓名(如“张三”),若证件上无中文名则返回空字符串full_name_en:英文姓名(如“ZHANG SAN”),通常为大写拼音card_number:证件号码,共18位(前8位+10位数字)date_of_birth:出生日期,格式YYYY-MM-Dddate_of_expiry:有效期截止日期,格式YYYY-MM-Dd
能力边界:API不提供证件图片的二次裁剪、人像提取或防伪检测,也不会返回任何置信度分数。若返回字段为空或明显错误(如出生日期为2099年),需在业务层做二次校验,不应完全信任OCR结果。
3. 性能与并发限制
- QPS:2请求/秒,超过会返回限流错误(HTTP 429或自定义错误码)。
- 超时:单次请求默认超时30秒,上传大图片或网络不稳定可能提前断开。
- 鉴权:仅已登录用户可调用,匿名访问不开放。需在请求头携带
Authorization: Bearer <API Key>。
参数详解与鉴权方式
根据接口文档,请求采用POST方法,Content-Type为application/json。
Header参数
| 参数名 | 必填 | 类型 | 示例 |
|---|---|---|---|
Authorization | 是 | string | Bearer sk-xxxxxxxxxxxxxxxx |
Content-Type | 否 | string | application/json(推荐显式指定) |
注意:部分历史版本的文档曾使用X-API-Key头,当前推荐统一使用Authorization。调用前请以官方文档页(https://apizero.cn/aidocs/ocr-tw-permit)为准。
请求体结构
{ "input_type": "url", "input_data": "https://example.com/tw-permit.jpg" }两个字段均为必填,input_data的值必须与input_type匹配。
curl 接入示例(可复制测试)
以下示例使用Authorization头,请将$API_KEY替换为你的真实密钥:
curl -sS -X POST \ -H "Authorization: Bearer $API_KEY" \ -H "Content-Type: application/json" \ -d '{"input_type": "url", "input_data": "https://example.com/tw-permit.jpg"}' \ "https://v1.apizero.cn/api/ocr-tw-permit"若使用 base64,可以这样构造请求体:
# 先获取图片的base64(Linux/Mac) BASE64=$(base64 -w0 /path/to/tw-permit.jpg) curl -sS -X POST \ -H "Authorization: Bearer $API_KEY" \ -H "Content-Type: application/json" \ -d "{\"input_type\": \"base64\", \"input_data\": \"$BASE64\"}" \ "https://v1.apizero.cn/api/ocr-tw-permit"注意:在bash中构造JSON体时请确保双引号正确转义,或使用jq等工具构建更安全的请求。
返回值解读与错误处理
成功响应(HTTP 200)
{ "code": 0, "msg": "成功", "request_id": "req_abc123", "data": { "card_number": "12345678901234567", "date_of_birth": "1990-01-01", "date_of_expiry": "2029-12-31", "full_name_cn": "张三", "full_name_en": "ZHANG SAN" } }code:0 表示成功,非零请参考msg说明。request_id:建议随日志记录,便于向平台反馈问题。
常见错误码
| 错误码 | 说明 | 排查方向 |
|---|---|---|
| 1001 | 参数缺失或格式错误 | 检查input_type/input_data是否存在且类型正确 |
| 1002 | 图片下载失败或base64解码失败 | URL不可达、图片损坏或base64编码异常 |
| 1003 | 图片格式不支持 | 确保为jpg/png,且文件未损坏 |
| 1004 | 图片中未识别到台胞证 | 图片不完整、反光严重或非台胞证 |
| 1010 | 鉴权失败 | 检查API Key是否正确、是否过期,或请求头是否为Authorization |
| 1020 | 频率超限(QPS > 2) | 降低并发或引入本地队列缓冲 |
注意:响应状态码可能为200但code非0,务必以code字段而非HTTP状态码判断业务成功与否。
工程化注意事项
1. 图片预处理
- 裁剪:在传图前建议用前端库(如opencv.js)自动检测证件四角并裁剪,减少背景干扰。
- 修正倾斜:若图片倾斜超过10度,可进行仿射变换修正后再传。
- 去反光与增强对比度:对低对比度图片使用直方图均衡化可提升识别率。
2. 并发与重试策略
- 由于QPS=2,若业务需要批量处理,应使用令牌桶或滑动窗口限流,避免触发429。
- 对于失败请求(网络错误或返回
code非0),采用指数退避重试(初始1秒,最大3次)。注意不要对同一张图片无限重试,防止累积限流。
3. 数据校验与异常处理
- 对返回的日期字段进行格式校验(如正则
^\d{4}-\d{2}-\d{2}$),防止无效值入库。 - 当
full_name_cn为空时,可降级使用英文名辅以人工确认;但要注意英文名也可能为空。 - 保留原始图片的hash或存储路径,便于后续人工复核异常案例。
4. 安全与隐私
- 图片中可能包含个人敏感信息,传输过程务必使用HTTPS;服务端收到后不应长期缓存原始图片。
- API Key 应保存在服务端环境变量中,避免前端暴露。
参考文档
- 台胞证识别 API 官方文档
- 原始 Markdown 文档
- 接口地址:
POST https://v1.apizero.cn/api/ocr-tw-permit