Kiểm tra tuổi đã chuyển từ một ô đánh dấu thành một bài toán kỹ thuật. Ở Anh, Online Safety Act yêu cầu một số dịch vụ dùng cách kiểm tra tuổi "hiệu quả cao". Ở EU, Ủy ban châu Âu đã công bố một bản thiết kế (blueprint) để chứng minh bạn trên 18 tuổi mà không phải giao thêm bất cứ thông tin nào khác. Cả hai đều nêu giấy tờ tùy thân là một con đường.

Bài viết này dành cho các lập trình viên được giao việc "thêm xác minh tuổi" và muốn biết việc quét giấy tờ tùy thân nằm ở đâu trong đó. Bài viết trình bày các phương pháp mà cơ quan chức năng của Anh và EU liệt kê, việc quét hộ chiếu hay căn cước chứng minh được gì và không chứng minh được gì, cách biến ngày sinh thành câu trả lời đủ tuổi hay chưa, và nên lưu lại gì sau đó. Mọi trích dẫn dưới đây đều lấy từ chính trang của cơ quan đó, có đường dẫn ngay tại chỗ; chúng tôi dịch lại sang tiếng Việt.

Đây là blog của doc.cheap, một API OCR hộ chiếu và giấy tờ tùy thân. Hãy đọc phần nói về sản phẩm với điều đó trong đầu.

Anh: ngưỡng là "hiệu quả cao"

Nghĩa vụ nằm ở section 12 của Online Safety Act 2023. Với những loại nội dung có hại nhất, nhà cung cấp phải "sử dụng xác minh tuổi hoặc ước tính tuổi (hoặc cả hai) để ngăn trẻ em ở mọi lứa tuổi tiếp cận nội dung ưu tiên chính có hại cho trẻ em". Và việc kiểm tra phải "thuộc loại, và được sử dụng theo cách, có hiệu quả cao trong việc xác định đúng một người dùng cụ thể có phải là trẻ em hay không".

Section 230 định nghĩa hai thuật ngữ này. Xác minh tuổi "là bất kỳ biện pháp nào được thiết kế để xác minh tuổi chính xác của người dùng" của một dịch vụ thuộc phạm vi điều chỉnh. Ước tính tuổi "là bất kỳ biện pháp nào được thiết kế để ước tính tuổi hoặc khoảng tuổi của người dùng". Điều này cũng chặn lối tắt dễ nhất: "Một biện pháp yêu cầu người dùng tự khai tuổi của mình (mà không có gì thêm) không được coi là xác minh tuổi hay ước tính tuổi."

Ofcom, cơ quan quản lý truyền thông của Anh, giải thích ngưỡng này trong hướng dẫn về kiểm tra tuổi hiệu quả cao dành cho các dịch vụ thuộc Part 3 (bản cập nhật ghi ngày 24 tháng 4 năm 2025). Mục 3 đưa ra "một danh sách không đầy đủ" các phương pháp mà Ofcom cho là có thể đạt hiệu quả cao:

Phương pháp trong danh sách của Ofcom Vai trò của giấy tờ tùy thân
Open banking Không
Đối chiếu giấy tờ tùy thân có ảnh (photo-ID matching) Có, giấy tờ chính là bằng chứng
Ước tính tuổi qua khuôn mặt Không
Kiểm tra tuổi qua nhà mạng di động Không
Kiểm tra qua thẻ tín dụng Không
Ước tính tuổi dựa trên email Không
Dịch vụ danh tính số Thường có, ở thời điểm danh tính được xác minh lần đầu

Ofcom mô tả việc đối chiếu giấy tờ có ảnh như sau: phương pháp này "hoạt động bằng cách thu thập thông tin liên quan từ giấy tờ tùy thân có ảnh được tải lên và so sánh với hình ảnh của người dùng tại thời điểm tải giấy tờ lên, để xác minh rằng đó là cùng một người".

Cùng mục đó liệt kê những gì không đạt, trong đó có "yêu cầu người dùng nhập ngày sinh mà không có thêm bằng chứng nào để xác nhận thông tin này". Ngày sinh do người dùng gõ vào là tự khai. Ngày sinh đọc từ giấy tờ là bằng chứng, và phần còn lại của hướng dẫn của Ofcom nói về việc bằng chứng đó phải tốt đến mức nào.

EU: một bản thiết kế dựa trên bằng chứng về tuổi

Về phía EU, Ủy ban châu Âu đã công bố phiên bản đầu tiên của bản thiết kế xác minh tuổi vào ngày 14 tháng 7 năm 2025. Theo lời của Ủy ban, bản thiết kế "cung cấp một phương pháp cho phép người dùng chứng minh họ trên 18 tuổi khi truy cập nội dung người lớn bị hạn chế, chẳng hạn nội dung khiêu dâm trực tuyến, mà không tiết lộ bất kỳ thông tin cá nhân nào khác".

Thiết kế này tách việc kiểm tra khỏi việc sử dụng. "Tuổi của người dùng sẽ được bên phát hành xác minh bằng dữ liệu cá nhân chi tiết, như ngày sinh. Tuy nhiên, các dịch vụ trực tuyến sẽ chỉ nhận được bằng chứng rằng người dùng trên 18 tuổi, không kèm bất kỳ thông tin cá nhân nào khác."

Giấy tờ tùy thân xuất hiện ở bước đầu tiên. Trang thông tin của Ủy ban về bản thiết kế liệt kê các nguồn của bằng chứng về tuổi gồm "eID quốc gia, hộ chiếu và thẻ căn cước, các ứng dụng cài sẵn có thông tin về tuổi như ứng dụng ngân hàng, hoặc kích hoạt ngoại tuyến qua bên thứ ba như bưu điện". Trang này cho biết thêm: "Vào tháng 10 năm 2025, phiên bản thứ hai của bản thiết kế đã được phát hành, có phương pháp dùng hộ chiếu và thẻ căn cước để tạo bằng chứng về tuổi."

Vậy ở cả hai nơi, giấy tờ là một đầu vào được chấp nhận. Nhưng ở cả hai nơi, chỉ một tấm ảnh giấy tờ không phải là toàn bộ việc kiểm tra.

Quét giấy tờ chứng minh được gì, và không chứng minh được gì

Quét giấy tờ trả lời tốt một câu hỏi: giấy tờ này ghi gì? Nó đọc ngày sinh, ngày hết hạn, loại giấy tờ và vùng đọc máy (MRZ), và có thể cho bạn biết các chữ số kiểm tra của vùng đó có khớp hay không. Đó là phần "thu thập thông tin liên quan" trong mô tả của Ofcom.

Nó không trả lời những câu hỏi khác mà một quy trình kiểm tra tuổi phải bao quát:

  • Người này có phải là chủ giấy tờ không? Mục về độ vững chắc của Ofcom nêu ra trường hợp hiển nhiên: "một người dùng là trẻ em tải lên hình ảnh của một giấy tờ không thuộc về mình". Câu trả lời của Ofcom là "yêu cầu chụp ảnh người dùng tại thời điểm tải giấy tờ lên khi đối chiếu giấy tờ có ảnh giúp xác minh rằng giấy tờ đó thuộc về người dùng này".
  • Người này có đang có mặt không? "Phát hiện người thật (liveness) mang lại thêm sự tin cậy rằng một người dùng là trẻ em không tải lên ảnh của người lớn, bằng cách bảo đảm người dùng đang trải qua quy trình kiểm tra tuổi có mặt vào thời điểm kiểm tra."
  • Giấy tờ có thật không? "Một quy trình kiểm tra giấy tờ có ảnh vững chắc không được dễ dàng bị qua mặt, vì vậy phương pháp dùng giấy tờ có ảnh phải phát hiện được giấy tờ giả mạo hoặc bị chỉnh sửa mà một đứa trẻ có thể tự tạo ra hoặc kiếm được."

Không câu hỏi nào trong số này là việc của OCR. Đọc giấy tờ và xác minh giấy tờ là hai việc riêng, do hai loại công cụ riêng đảm nhận, và một quy trình kiểm tra tuổi dựa trên giấy tờ cần cả hai. Bước đọc cho bạn dữ liệu đáng tin về giấy tờ; đối chiếu khuôn mặt, kiểm tra người thật và kiểm tra tính xác thực cho bạn biết có nên tin giấy tờ và con người đó hay không.

Từ ngày sinh đến đủ tuổi hay chưa

Khi đã đọc được ngày sinh, phép tính tuổi rất ngắn nhưng dễ sai. Chỉ trừ năm là chưa đủ: người sinh ngày 20 tháng 11 năm 2008 vào ngày 10 tháng 11 năm 2026 mới 17 tuổi, chưa phải 18. Hãy so cả tháng và ngày.

from datetime import date


def age_on(birth_iso: str, on: date) -> int:
    """Whole years completed on the day `on`, from a YYYY-MM-DD date of birth."""
    born = date.fromisoformat(birth_iso)
    years = on.year - born.year
    if (on.month, on.day) < (born.month, born.day):
        years -= 1  # the birthday has not come yet this year
    return years


def is_over(birth_iso: str, threshold: int, on: date) -> bool:
    return age_on(birth_iso, on) >= threshold


print(age_on("2008-11-20", date(2026, 11, 10)))     # 17
print(is_over("2008-11-20", 18, date(2026, 11, 20)))  # True

Trong thực tế, vài chi tiết sau có ý nghĩa:

  • Dùng ngày kiểm tra, theo một múi giờ duy nhất. "Hôm nay" trên máy chủ và "hôm nay" của người dùng có thể khác nhau vào lúc gần nửa đêm. Hãy chọn một cách tính và ghi lại ngày đã dùng.
  • Ngày 29 tháng 2. Với phép so sánh ở trên, người sinh ngày 29 tháng 2 sẽ tròn tuổi mới vào ngày 1 tháng 3 trong những năm không có ngày 29 tháng 2. Nếu pháp luật nơi bạn hoạt động quy định khác, chỉ cần sửa đúng nhánh đó.
  • Thiếu ngày sinh không phải là câu trả lời. Nếu kết quả quét không có ngày sinh, kết quả là "không kiểm tra được", không bao giờ là "trên 18 tuổi".
  • Hạn sử dụng là một câu hỏi khác. Giấy tờ đã hết hạn có được chấp nhận làm bằng chứng hay không là chính sách của bạn, vì vậy hãy đọc ngày hết hạn và quyết định một cách rõ ràng.

Giữ câu trả lời, không giữ giấy tờ

Thiết kế của Ủy ban chỉ gửi cho các dịch vụ "bằng chứng rằng người dùng trên 18 tuổi". Ý tưởng đó cũng áp dụng được trong hệ thống của bạn: khi đã kiểm tra xong, thứ bạn cần là một giá trị đúng/sai và một ngày, không phải ảnh hộ chiếu.

Mục về quyền riêng tư của Ofcom cũng đi theo hướng đó. Mục này nhắc các nhà cung cấp rằng "mọi phương pháp kiểm tra tuổi đều liên quan đến việc xử lý dữ liệu cá nhân và cần tuân theo cách tiếp cận bảo vệ dữ liệu ngay từ khâu thiết kế", đồng thời nêu việc tối thiểu hóa dữ liệu và giới hạn thời gian lưu trữ trong số các nguyên tắc cần theo.

Một bản ghi tối thiểu trông như sau:

{
  "user_id": "u_3f9c",
  "check": "age_over_18",
  "result": true,
  "checked_on": "2026-11-10",
  "method": "photo_id_matching"
}

Không ảnh, không số giấy tờ, không ngày sinh. Nếu luật yêu cầu bạn lưu nhiều hơn, hãy lưu đúng phần đó, trong một kho duy nhất có ngày xóa riêng.

doc.cheap nằm ở đâu

doc.cheap đọc hộ chiếu, thẻ căn cước và giấy phép lái xe, rồi trả về nội dung in trên đó dưới dạng JSON. Với việc kiểm tra tuổi, các trường hữu ích là holder.birth_date, một ngày ISO YYYY-MM-DD hoặc null, cùng với document.expiry_date, document.is_expired và mrz.status, để ngày bạn đưa vào age_on đến từ một lần đọc mà bạn có thể đối chiếu lại.

Đây là dịch vụ đọc, không phải dịch vụ xác minh. Trong kịch bản chỉ nhận dạng, trường authenticity.overall của phản hồi có giá trị not_checked, còn đối chiếu khuôn mặt và kiểm tra người thật vẫn thuộc về các công cụ được xây dựng cho việc đó. Dịch vụ cũng không lưu gì bạn không yêu cầu: retain_hours: 0 trên khóa live sẽ không ghi một dòng nào, như hướng dẫn về thời gian lưu lịch sử giải thích. Bản thân hình ảnh không bao giờ được lưu.

Để thử bước đọc trước khi thiết kế phần còn lại, hãy bắt đầu với API OCR hộ chiếu miễn phí. Nếu bạn đang chọn nhà cung cấp, bảng so sánh API OCR hộ chiếu đặt các mức giá đã công bố cạnh nhau.

Đây là bản tóm tắt kỹ thuật, không phải tư vấn pháp lý.

Một câu hỏi cho bạn: phần nào trong quy trình xác minh tuổi của bạn mất nhiều thời gian nhất để làm đúng – bước đọc, bước đối chiếu khuôn mặt hay bản ghi bạn lưu lại? Hãy cho chúng tôi biết trong phần bình luận bên dưới.