資料擷取
一個 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,其上的地址會與從身分證件讀取的地址進行比對。這是單純的文字與詞元比對,並非獨立的文件分類器;而且只有在該工作階段需要、且確實提供了文件時才會執行。
遮蔽與個人識別資訊處理
擷取出的資料與影像受到同等的保護。
結構化欄位與套用於身分證件照片的相同隱私控管並行運作。
出生日期靜態加密
出生日期以靜態加密方式儲存;若沒有加密金鑰,服務將無法運行。
影像依計時自動清除
所拍攝的證件與自拍影像會依較短的計時自動清除,預設為七天。系統會定期執行清除作業,並在每次重新啟動後不久再執行一次,因此即使在閒置期間,影像也不會超過應刪除的日期而繼續留存。
裝置端分數遮蔽
若比對或信心數值原本會顯示在申請人自己的手機上,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 酬載中皆然。
- Sandbox 工作階段回傳的欄位結構與正式環境相同,讓您在讀取任何一份真實文件之前就能完成整合開發。
常見問題
關於資料擷取的直接解答。
親自看看這些欄位
執行一次 sandbox 驗證,並讀取結構化結果。
建立一個 sandbox 工作階段,用您自己的手機掃描文件,並在回應中查看每個欄位、其來源和判定結果。Sandbox 工作階段一律不計費。