Nếu ứng dụng của bạn hiện yêu cầu người dùng chụp ảnh hộ chiếu hoặc thẻ căn cước, có lẽ bạn đã nghe rằng Ví danh tính số châu Âu (EU Digital Identity Wallet) sẽ ra mắt "vào cuối năm 2026". Mốc thời gian này có thật và chính xác: ngày 24 tháng 12 năm 2026. Nhưng đó là hạn chót cho các quốc gia thành viên, không phải cho bạn, và nó không tắt việc quét giấy tờ.
Bài viết này làm ba việc. Bài chỉ ra mốc thời gian đến từ đâu, kèm phép tính. Bài liệt kê những gì một chiếc ví thực sự gửi đi, dựa trên các bảng thuộc tính trong văn bản pháp lý. Và bài phác thảo một thiết kế chấp nhận ví khi người dùng có ví, và quay về quét giấy tờ khi họ không có. Bài do doc.cheap viết, một API OCR hộ chiếu và thẻ căn cước, nên hãy đọc các phần về sản phẩm với điều đó trong đầu. doc.cheap đọc ảnh giấy tờ; nó không đọc ví.
Ngày 24 tháng 12 năm 2026 đến từ đâu
Nghĩa vụ này nằm ở Điều 5a(1) của Reg. (EU) No 910/2014, được bổ sung bởi Reg. (EU) 2024/1183, văn bản sửa đổi eIDAS. Điều này quy định mỗi quốc gia thành viên "phải cung cấp ít nhất một Ví danh tính số châu Âu trong vòng 24 tháng kể từ ngày có hiệu lực của các văn bản thi hành được nêu tại khoản 23 của Điều này và tại Điều 5c(6)".
Vì vậy, đồng hồ không bắt đầu chạy từ chính văn bản sửa đổi eIDAS. Nó bắt đầu từ các văn bản thi hành của Ủy ban châu Âu. Các văn bản theo Điều 5a(23) là bốn văn bản thi hành của Ủy ban ngày 28 tháng 11 năm 2024, trong đó có Implementing Reg. (EU) 2024/2979 về tính toàn vẹn và các chức năng cốt lõi của ví. Văn bản này được đăng trên Công báo (OJ L, 2024/2979) ngày 4 tháng 12 năm 2024. Điều 15 của nó quy định văn bản "có hiệu lực vào ngày thứ hai mươi sau ngày đăng trên Công báo của Liên minh châu Âu".
Phép tính:
| Bước | Ngày |
|---|---|
| Đăng trên Công báo | 4 tháng 12 năm 2024 |
| Ngày thứ 1 sau khi đăng | 5 tháng 12 năm 2024 |
| Ngày thứ 20 sau khi đăng: có hiệu lực | 24 tháng 12 năm 2024 |
| Cộng 24 tháng (Điều 5a(1)): hạn chót cho ví | 24 tháng 12 năm 2026 |
| Cộng 36 tháng (Điều 5f(2)): một số bên tin cậy tư nhân phải chấp nhận ví | 24 tháng 12 năm 2027 |
Cụm "ngày thứ hai mươi sau" được tính từ ngày kế tiếp ngày đăng, nên 4 tháng 12 cộng 20 ngày rơi vào ngày 24, không phải ngày 23. Cũng chính cách tính theo văn bản đó quyết định mốc thứ hai trong bảng, là mốc mà phần lớn các đội sản phẩm thực sự quan tâm (xem thêm bên dưới).
Ví gửi đi những gì
Ví không gửi ảnh hộ chiếu. Nó xuất trình dữ liệu đã được ký. Bộ dữ liệu cho một thể nhân được ấn định trong Phụ lục của Implementing Reg. (EU) 2024/2977, gọi là "dữ liệu nhận dạng cá nhân" (person identification data, PID). Phụ lục nêu rằng PID được cấp theo hai định dạng: ISO/IEC 18013-5:2021 và W3C "Verifiable Credentials Data Model 1.1".
Dưới đây là các thuộc tính, cùng mức độ bắt buộc mà văn bản gán cho từng thuộc tính (Bảng 1, 2 và 5 của Phụ lục, theo bản đăng ngày 4 tháng 12 năm 2024). Cột cuối là trường gần nhất trong phản hồi quét của doc.cheap, để bạn thấy hai thế giới khớp nhau ở đâu và lệch nhau ở đâu.
| Thuộc tính PID | Mức độ | Trường gần nhất khi quét giấy tờ |
|---|---|---|
family_name |
bắt buộc | holder.surname |
given_name |
bắt buộc | holder.given_names |
birth_date |
bắt buộc | holder.birth_date (ISO 8601) |
birth_place |
bắt buộc | một mục birth_place trong fields[], khi giấy tờ có in |
nationality |
bắt buộc (alpha-2, một hoặc nhiều) | holder.nationality (alpha-3, một) |
resident_address, resident_country, resident_state, resident_city, resident_postal_code, resident_street, resident_house_number |
tùy chọn | không có trên trang dữ liệu hộ chiếu |
personal_administrative_number |
tùy chọn | không phải cùng một thứ; fields[] có thể chứa personal_number mà giấy tờ in |
portrait |
tùy chọn | images.main_photo |
family_name_birth, given_name_birth |
tùy chọn | không có trường chuẩn hóa |
sex |
tùy chọn (mã 0, 1, 2, 3, 4, 5, 6, 9) | holder.sex (M, F, X) |
email_address, mobile_phone_number |
tùy chọn | không có trên giấy tờ |
expiry_date (siêu dữ liệu) |
bắt buộc | document.expiry_date, nhưng là của giấy tờ, không phải của PID |
issuing_authority (siêu dữ liệu) |
bắt buộc | một mục authority trong fields[], khi có in |
issuing_country (siêu dữ liệu) |
bắt buộc (alpha-2) | document.issuing_state (alpha-3) |
document_number (siêu dữ liệu) |
tùy chọn | không phải cùng một thứ: số của PID do nhà cung cấp PID cấp, còn document.number là số hộ chiếu |
issuing_jurisdiction, location_status (siêu dữ liệu) |
tùy chọn | không có |
Có ba điểm trong bảng này đáng lưu ý khi bạn viết mã ánh xạ.
- Mã quốc gia khác nhau. PID dùng ISO 3166-1 alpha-2 (
DE). Hộ chiếu và vùng đọc bằng máy (MRZ) dùng alpha-3 (DEU). Hãy giữ một dạng nội bộ duy nhất và chuyển đổi ở biên hệ thống. - "Bắt buộc" không có nghĩa là "luôn biết". Ngay dưới Bảng 1, văn bản bổ sung: "Khi giá trị của một thuộc tính không được biết đối với người đó hoặc vì lý do khác không thể được cấp như một phần của bộ dữ liệu nhận dạng cá nhân, các quốc gia thành viên phải dùng một giá trị thuộc tính phù hợp với tình huống thay thế." Hãy chờ đợi giá trị giữ chỗ, không phải khóa bị thiếu.
- Chỉ có năm thuộc tính bắt buộc về con người. Địa chỉ, ảnh chân dung, giới tính và họ tên khai sinh đều là tùy chọn. Nếu luồng của bạn cần một trong số đó, ví có thể đơn giản là không chứa nó đối với một người dùng cụ thể.
Ai vẫn sẽ đến với một giấy tờ
Hạn chót buộc mỗi quốc gia thành viên phải cung cấp ví. Nó không buộc ai phải sử dụng ví. Điều 5a(15) nói thẳng: "Việc sử dụng Ví danh tính số châu Âu là tự nguyện." Rồi tiếp: "Việc truy cập các dịch vụ công và tư bằng các phương tiện nhận dạng và xác thực hiện có khác vẫn phải được duy trì."
Vì vậy, sau ngày 24 tháng 12 năm 2026 bạn vẫn sẽ gặp:
- Du khách và khách hàng từ ngoài EU. Phần dẫn nhập (recitals) gắn ví với "danh tính pháp lý của công dân Liên minh, người cư trú tại Liên minh hoặc pháp nhân". Một du khách mang hộ chiếu nước khác không có ví EU để xuất trình.
- Những người chưa cài ví, hoặc không thể, hoặc không muốn. Văn bản bảo vệ lựa chọn đó.
- Những luồng cần chính giấy tờ. Một số quy trình cần ảnh giấy tờ, số giấy tờ hoặc vùng đọc bằng máy của giấy tờ vật lý, chứ không phải một chứng thực về con người. PID của ví mang
document_numberriêng, do nhà cung cấp PID cấp, và đó không phải số hộ chiếu. - Giai đoạn trước khi ví của một quốc gia cụ thể đi vào hoạt động. Ngày 24 tháng 12 năm 2026 là hạn chót pháp lý. Khi nào từng ví quốc gia thực sự đến tay người dùng là một câu hỏi khác, và câu trả lời đáng tin duy nhất cho từng nước là thông báo của chính nước đó hoặc của Ủy ban châu Âu.
Một thiết kế nhận cả hai
Hình dạng trụ vững qua tất cả những điều trên rất đơn giản: yêu cầu xuất trình ví khi người dùng có ví, và quay về quét giấy tờ khi họ không có. Cả hai nhánh kết thúc ở cùng một bản ghi nội bộ.
user starts verification
|
v
offers a wallet? --yes--> wallet presentation --> verify signature --> map PID
| |
no v
| internal identity
v record
document photo --> POST /v1/scans --> map scan fields ----------------^
Vài nguyên tắc giúp hai nhánh thay thế được cho nhau:
- Ánh xạ cả hai vào một bản ghi với tên trường của riêng bạn. Dùng bảng ở trên làm bảng ánh xạ.
- Giữ lại nguồn. Lưu lại bản ghi đến từ ví hay từ lượt quét. Chúng mang bằng chứng khác nhau, và người thẩm định sẽ muốn biết là loại nào.
- Coi null là trung thực. Trong phản hồi của doc.cheap, mọi khóa luôn có mặt và giá trị không biết là
null. Ví có thể gửi giá trị giữ chỗ thay vào đó. Hãy chuẩn hóa cả hai về một quy ước. - Chỉ lưu ít nhất những gì luồng cần. Có thể chạy lượt quét sao cho phía API không ghi lại gì (xem bên dưới).
Đây là lệnh gọi dự phòng bằng fetch thuần. Khóa sandbox công khai sk_sandbox_public được in trong tài liệu và không cần đăng ký; nó bị giới hạn tần suất theo địa chỉ máy khách.
import { readFileSync } from "node:fs";
import { randomUUID } from "node:crypto";
async function scanDocument(path, apiKey = "sk_sandbox_public") {
const response = await fetch("https://api.doc.cheap/v1/scans", {
method: "POST",
headers: {
Authorization: `Bearer ${apiKey}`,
"Content-Type": "application/json",
"Idempotency-Key": randomUUID(), // lần thử lại trả về kết quả đầu tiên
},
body: JSON.stringify({
image: readFileSync(path).toString("base64"),
options: { retain_hours: 0, return_portrait: false }, // không lưu gì
}),
});
if (!response.ok) throw new Error(`scan failed: HTTP ${response.status}`);
return response.json();
}
// Ánh xạ lượt quét vào cùng bản ghi mà một lần xuất trình ví sẽ điền.
function fromScan(scan) {
if (scan.meta.status !== "recognized") return null;
const field = (name) => scan.fields.find((f) => f.id === `${name}@0`)?.value ?? null;
return {
source: "document_scan",
family_name: scan.holder?.surname ?? null,
given_name: scan.holder?.given_names ?? null,
birth_date: scan.holder?.birth_date ?? null,
birth_place: field("birth_place"),
nationality_alpha3: scan.holder?.nationality ?? null,
issuing_country_alpha3: scan.document?.issuing_state ?? null,
document_number: scan.document?.number ?? null,
mrz_status: scan.mrz.status, // "passed", "failed" hoặc "absent"
};
}
meta.status là một trong năm chuỗi: recognized, no_document_found, unreadable, unsupported_document hoặc rejected. Chỉ giá trị đầu tiên nên điền vào bản ghi; các giá trị còn lại nên đưa người dùng quay lại chụp ảnh lại. Với khóa trả phí, số dư chỉ bị trừ khi lượt quét được tính phí.
Chúng tôi đã chạy một lệnh gọi kiểu này với sk_sandbox_public ngày 24 tháng 9 năm 2026 lúc 21:17 UTC, bằng giấy tờ thử nghiệm của chính sản phẩm, một hộ chiếu. Phản hồi trả về HTTP 200. Mọi giá trị giấy tờ bên dưới đều được che, và fields, images cùng mrz.lines đã được lược bớt:
{
"meta": {
"schema_version": "1.0",
"id": "<SCAN_ID>",
"status": "recognized",
"billed": true,
"confidence": "medium",
"timing": { "upload_ms": 255, "processing_ms": 409, "total_ms": 678 },
"created_at": "<RUN_TIMESTAMP>",
"reference": null
},
"document": {
"kind": "passport", "country": "<ISO3>", "country_name": "<COUNTRY>",
"issuing_state": "<ISO3>", "number": "<DOCUMENT_NUMBER>", "series": null,
"issue_date": "<DATE>", "expiry_date": "<DATE>", "is_expired": false, "days_remaining": "<N>"
},
"holder": {
"given_names": "<GIVEN_NAMES>", "surname": "<SURNAME>", "full_name": "<FULL_NAME>",
"birth_date": "<DATE>", "sex": "<SEX>", "nationality": "<ISO3>"
},
"mrz": { "status": "passed", "reason": null, "lines": ["<LINE_1>", "<LINE_2>"], "text": "<MRZ>" },
"quality": { "overall": "pass" },
"authenticity": { "overall": "not_checked", "checks": [] }
}
billed: true ở đây nghĩa là lượt quét thuộc loại tính phí và được trừ vào hạn mức miễn phí của sandbox; bản thân khóa sandbox không bao giờ bị tính tiền. Mảng fields của lượt chạy đó có các mục birth_place, authority và personal_number, chính là nơi bảng ở trên trỏ tới cho các thuộc tính PID tương ứng. Trang dữ liệu hộ chiếu mang MRZ gồm hai dòng theo bố cục TD3; trang định dạng TD1, TD2 và TD3 trình bày các bố cục cạnh nhau.
Hãy chú ý authenticity.overall: "not_checked". Một lượt quét như thế này là nhận dạng: nó đọc những gì được in và kiểm tra các chữ số kiểm tra (check digit) của MRZ. Nó không phải phát hiện giả mạo, và không mang cùng mức bảo đảm như một lần xuất trình ví có chữ ký. Nếu quy trình của bạn cần mức bảo đảm cao hơn trên nhánh quét, điều đó phải đến từ một chỗ khác trong luồng của bạn. Nếu bạn đang chọn nhà cung cấp cho phương án dự phòng, trang so sánh API OCR hộ chiếu của chúng tôi trình bày các lựa chọn, kể cả những lựa chọn làm nhiều hơn việc nhận dạng.
Những gì cần theo dõi tiếp
- 24 tháng 12 năm 2026 – hạn chót cho ví. Điều 5a(1), Reg. (EU) 2024/1183, tính từ ngày có hiệu lực của các văn bản thi hành như đã trình bày ở trên.
- 24 tháng 12 năm 2027 – các bên tin cậy tư nhân. Điều 5f(2) quy định các bên tin cậy tư nhân buộc phải dùng xác thực người dùng mạnh để nhận dạng trực tuyến, theo luật hoặc theo hợp đồng, "chậm nhất 36 tháng kể từ ngày có hiệu lực của các văn bản thi hành được nêu tại Điều 5a(23) và Điều 5c(6) và chỉ khi người dùng tự nguyện yêu cầu, cũng phải chấp nhận Ví danh tính số châu Âu". Văn bản nêu tên các lĩnh vực giao thông vận tải, năng lượng, ngân hàng, dịch vụ tài chính, an sinh xã hội, y tế, nước uống, bưu chính, hạ tầng số, giáo dục và viễn thông, đồng thời loại trừ doanh nghiệp siêu nhỏ và doanh nghiệp nhỏ.
- Các nền tảng trực tuyến rất lớn. Điều 5f(3) buộc họ chấp nhận ví để xác thực người dùng, cũng chỉ khi người dùng tự nguyện yêu cầu và cho lượng dữ liệu tối thiểu cần thiết.
- Thay đổi đối với các văn bản thi hành. Đoạn dẫn nhập (recital) 4 của Implementing Reg. (EU) 2024/2979 nói rằng Ủy ban "nên rà soát và cập nhật" văn bản khi cần. Hãy kiểm tra các bảng thuộc tính trong 2024/2977 trước khi bạn chốt bảng ánh xạ.
Kết luận thực tế: xây nhánh ví khi các nước của người dùng bạn phát hành ví, giữ nhánh giấy tờ, và ánh xạ cả hai vào một bản ghi ngay từ ngày đầu. Tài liệu API OCR hộ chiếu và thẻ căn cước trình bày đầy đủ phía quét.
Đây là bản tóm tắt kỹ thuật, không phải tư vấn pháp lý.