跳到主要内容
ShieldID

数据提取

一个返回结构化字段而非整块文本的 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 每次都按同一套固定顺序来解决。

  1. PDF417 条形码
  2. 护照 MRZ(通过校验和之后)
  3. 证件正面印刷内容的结构化读取
  4. 整页 OCR 兜底

地址证明文件

上传第二份文件,即可得到直观的地址比对结果。

当验证需要地址证明时,申请人会上传一份单独的文件,ShieldID 读取它的方式与读取身份证件相同。

地址证明文件会经过 OCR 处理,其中的地址会与从身份证件读取的地址进行比对。这是单纯的文本和词元比对,并非独立的文件分类器,且仅在会话要求且确实提供了文件时才会运行。

脱敏与 PII 处理

提取的数据与图像采用同样的保护方式。

结构化字段与适用于证件照片本身的隐私控制措施并存。

出生日期静态加密

出生日期以加密形式静态存储;如果没有加密密钥,服务将无法运行。

图像定时清除

所拍摄的证件和自拍图像会按较短的定时自动清除,默认为七天。系统会按固定间隔执行清除,并在每次重启后不久再执行一次,因此即使在空闲期间,也不会让图像保留到应删除日期之后。

设备端评分脱敏

在匹配度或置信度数值原本会显示到申请人自己手机上的情况下,ShieldID 会在消息显示前去除其中的原始百分比,因此原始评分绝不会出现在您的账户之外。

记录比图像保留得更久

图像按计划清除。验证已发生这一事实及其发现的结果会保留在您的账户中;对于 Trust Ledger 集成,还会作为已通过/未通过的条目记录在 Activity Ledger 中(ShieldID API 账户的账本条目:即将推出)。

示例结果

逐字段判定结果,与 API 返回的结构一致。

以下姓名、号码和地址均为本示例虚构。字段集合、来源和判定结果均为真实的结果结构。

结果中的部分字段示例数据
字段值来源判定
person.name"Priya Chandrasekaran"barcodematch
person.dob"1991-07-22"barcodematch
person.document_number"C4839201"mrzmatch
person.document_country"CA"barcode issuer codematch
person.address"18 Spruce Ave, Ottawa ON"barcodematch
identity.name_matchPASSfront vs barcode vs requesterPASS
checks.document_tamper"no_indication"advisory modeladvisory — not gating
json
// 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 负载中,每个字段都标明其来源,并带有各自的结论。
  • 沙盒会话返回的字段结构与生产环境相同,因此您可以在读取任何一份真实证件之前就构建好集成。

常见问题

关于数据提取的直接解答。

亲自查看这些字段

运行一次沙盒验证,读取结构化结果。

创建一个沙盒会话,用您自己的手机扫描一份证件,即可在响应中看到每个字段、其来源和结论。沙盒会话不会计费。