数据提取
一个返回结构化字段而非整块文本的 OCR 身份证件扫描 API。
ShieldID 把政府签发的带照片证件转换为结构化的逐字段数据:姓名、出生日期、证件号码、有效期、地址等,每个字段都带有其来源和各自的结论。在同一个会话中,既是证件数据提取 API,也是证件验证 API。
返回的内容
结构化字段,以证件实际带有的为准。
并非每种证件都带有所有字段。ShieldID 返回证件上有的内容,并标明没有的内容。
- 全名
- 按印刷内容,以及证件带有条形码或 MRZ 时其中编码的内容。
- 出生日期
- 从印刷面读取,并与条形码和 MRZ 交叉核对。
- 证件号码
- 驾驶证号码或护照号码,在发证机构的格式允许的情况下,会检查其内部一致性。
- 有效期
- 从印刷面以及条形码或 MRZ 读取。
- 地址
- 从印刷面和条形码(如有)读取;可与单独上传的地址文件进行比对。
- 性别
- 在证件印刷或编码了该字段时读取。
- 签发辖区
- 在文件带有可识别的条形码签发机构代码时,据此识别(视可用情况而定)。
三个来源,一次比对
条形码、MRZ 和证件正面印刷内容,都是有意识地读取,而不是不经意地混在一起。
每个字段都会标明其来源。当两个来源不一致时,结果上会出现一个标记,而不是把两个数值取平均。
PDF417 条形码
北美驾驶执照或身份证的背面会被解码为结构化的 AAMVA 字段。当文件带有条形码时,其字段优先于正面的印刷内容。
护照 MRZ
系统会定位机读区、读取内容,并按照机读区内置的 ICAO 校验位公式进行验证。只有达到最低有效性评分(并据此评分进行检查),通过 MRZ 读取的字段才会被信任——校验未通过的机读区不能覆盖更干净的来源。
证件正面的结构化识别和整页 OCR
若能识别文件自身的版式,则按该版式读取印刷面;否则回退到整页 OCR,使不熟悉的文件同样能得到可读的字段。
冲突会被标记,而不是取平均
如果姓名或出生日期在证件正面、条形码和 MRZ 之间不一致,结果中会报告为不匹配。处理流程不会悄悄选出一个“胜者”而掩盖不一致。
MRZ 校验和验证
机读区必须先通过自身的数学校验,我们才会信任它。
护照上的 ICAO 机读区在设计上带有校验位。ShieldID 会先验证这些校验位,再将 MRZ 读取的字段视为可靠。
专用检测器负责定位 MRZ,读取器提取字符,然后根据机读区自身的校验和公式对结果进行有效性评分。只有达到最低有效性评分的字段才会以完整优先级被信任;读取质量较差的机读区会被相应对待,而不会被当作干净数据直接放行。
条形码优先
当来源重叠时,以最可靠的来源为准。
同一个字段可能同时出现在条形码、MRZ 和证件正面印刷内容上。ShieldID 每次都按同一套固定顺序来解决。
- PDF417 条形码
- 护照 MRZ(通过校验和之后)
- 证件正面印刷内容的结构化读取
- 整页 OCR 兜底
地址证明文件
上传第二份文件,即可得到直观的地址比对结果。
当验证需要地址证明时,申请人会上传一份单独的文件,ShieldID 读取它的方式与读取身份证件相同。
地址证明文件会经过 OCR 处理,其中的地址会与从身份证件读取的地址进行比对。这是单纯的文本和词元比对,并非独立的文件分类器,且仅在会话要求且确实提供了文件时才会运行。
脱敏与 PII 处理
提取的数据与图像采用同样的保护方式。
结构化字段与适用于证件照片本身的隐私控制措施并存。
出生日期静态加密
出生日期以加密形式静态存储;如果没有加密密钥,服务将无法运行。
图像定时清除
所拍摄的证件和自拍图像会按较短的定时自动清除,默认为七天。系统会按固定间隔执行清除,并在每次重启后不久再执行一次,因此即使在空闲期间,也不会让图像保留到应删除日期之后。
设备端评分脱敏
在匹配度或置信度数值原本会显示到申请人自己手机上的情况下,ShieldID 会在消息显示前去除其中的原始百分比,因此原始评分绝不会出现在您的账户之外。
记录比图像保留得更久
图像按计划清除。验证已发生这一事实及其发现的结果会保留在您的账户中;对于 Trust Ledger 集成,还会作为已通过/未通过的条目记录在 Activity Ledger 中(ShieldID API 账户的账本条目:即将推出)。
示例结果
逐字段判定结果,与 API 返回的结构一致。
以下姓名、号码和地址均为本示例虚构。字段集合、来源和判定结果均为真实的结果结构。
| 字段 | 值 | 来源 | 判定 |
|---|---|---|---|
| person.name | "Priya Chandrasekaran" | barcode | match |
| person.dob | "1991-07-22" | barcode | match |
| person.document_number | "C4839201" | mrz | match |
| person.document_country | "CA" | barcode issuer code | match |
| person.address | "18 Spruce Ave, Ottawa ON" | barcode | match |
| identity.name_match | PASS | front vs barcode vs requester | PASS |
| checks.document_tamper | "no_indication" | advisory model | advisory — not gating |
// Sample result. Names, numbers and addresses are fictional.
{
"session_id": "ses_9f2c...sample",
"status": "VERIFIED",
"environment": "sandbox",
"person": {
"name": "Priya Chandrasekaran",
"dob": "1991-07-22",
"document_type": "DRIVERS_LICENCE",
"document_country": "CA",
"document_jurisdiction": "ON",
"address": "18 Spruce Ave, Ottawa ON"
},
"identity": {
"checks": ["name_match"],
"warnings": [],
"sources": {
"name": "barcode",
"dob": "barcode",
"address": "barcode"
}
},
"checks": {
"document": "PASS",
"identity": "PASS",
"document_tamper": "no_indication"
},
"completed_at": "2026-09-17T14:02:11Z"
}集成说明
无论您在哪里读取结果,字段都相同。
结构化字段并不是独立于验证会话的另一个产品。它们是同一份结果的一部分。
- 验证完成后,字段包含在您通过 API 获取的会话结果中。
- 验证完成时,同一份结果会通过签名的 webhook 发送到您的端点,因此您无需轮询。
- 无论是在 API 结果还是 webhook 负载中,每个字段都标明其来源,并带有各自的结论。
- 沙盒会话返回的字段结构与生产环境相同,因此您可以在读取任何一份真实证件之前就构建好集成。
常见问题