Menu

Độ dài số giấy tờ tùy thân khác nhau thế nào giữa các quốc gia

Số giấy tờ tùy thân không có một độ dài chung: nước dùng toàn chữ số, nước trộn chữ và số, nước gắn chữ số kiểm tra hoặc cả ngày sinh. Bài này chỉ cách xử lý mà không phải viết lại mã cho từng nước.

Đăng ngày

  • giấy tờ tùy thân
  • dữ liệu thử
  • quốc tế

Độ dài số giấy tờ tùy thân là một trong những giả định bị viết cứng nhiều nhất trong các biểu mẫu quốc tế. Lập trình viên thường nghĩ tới một con số quen thuộc ở nước mình rồi đặt nó làm giới hạn cho toàn hệ thống. Bài này cho thấy vì sao cách làm đó sớm muộn cũng vỡ, các kiểu cấu trúc thường gặp, và cách xử lý gọn khi bạn phải nhận hồ sơ từ nhiều nước.

Vì sao không có một độ dài chung?

Không có tổ chức nào đứng ra quy định số giấy tờ tùy thân của mọi quốc gia phải dài bao nhiêu. Mỗi nước tự đặt hệ thống định danh của mình, rồi đổi nó khi hành chính thay đổi. Kết quả là chỉ trong một khu vực, bạn đã gặp những hệ thống ra đời ở các thời điểm khác nhau, phục vụ các mục đích khác nhau, và không hề được thiết kế để ăn khớp với nhau.

Có nước dùng một chuỗi toàn chữ số. Có nước trộn chữ cái và chữ số để tăng số lượng tổ hợp có thể cấp. Có nước gắn thêm một hoặc hai chữ số kiểm tra ở cuối để phát hiện lỗi gõ. Lại có nước mã hóa cả ngày sinh vào trong số, chẳng hạn các nước Bắc Âu với số định danh cá nhân của họ. Vậy nên câu hỏi đúng không phải là số đó dài bao nhiêu, mà là hệ thống của bạn có chịu được sự khác biệt hay không.

Những kiểu cấu trúc thường gặp

Bảng dưới đây gom các hệ thống định danh phổ biến thành bốn kiểu. Điều đáng chú ý là không kiểu nào thay thế kiểu nào; một hệ thống có thể vừa trộn chữ và số, vừa có chữ số kiểm tra.

Kiểu cấu trúc Đặc điểm nhận biết Hệ quả khi kiểm tra
Toàn chữ số Chỉ gồm các chữ số từ 0 tới 9 Nếu viết cứng độ dài, bạn sẽ chặn nhầm các nước khác
Trộn chữ và số Có cả chữ cái, thường là chữ in hoa Phải quyết định chuyện chữ hoa chữ thường trước khi so sánh
Có chữ số kiểm tra Một hoặc hai ký tự cuối dùng để phát hiện lỗi gõ Có thể kiểm tra sớm, nhưng đừng coi đó là bằng chứng hợp lệ
Có ngày sinh bên trong Vài chữ số đầu khớp với ngày sinh của người được cấp Không được đọc ngày sinh từ đó rồi bỏ qua trường ngày sinh riêng

Trong bảng này chỉ có vài con số cụ thể được nhắc tới khi cần ví dụ. Chẳng hạn Hoa Kỳ dùng chín chữ số cho số an sinh xã hội, Canada dùng chín chữ số cho số bảo hiểm xã hội, còn Brazil dùng mười một chữ số cho mã số thuế cá nhân với hai chữ số cuối là chữ số kiểm tra. Với mọi nước khác, hãy coi như chưa biết độ dài cho tới khi bạn tra được nguồn chính thức.

Chữ số kiểm tra có nghĩa gì?

Rất nhiều hệ thống đánh số dùng một phép tính đơn giản ở cuối để tạo ra chữ số kiểm tra: nhân từng chữ số với một trọng số, cộng lại, rồi lấy phần dư khi chia cho một số nào đó. Kết quả là nếu người dùng gõ nhầm một chữ số hoặc đổi chỗ hai chữ số cạnh nhau, số mới thường không còn khớp phép tính, và hệ thống phát hiện được ngay.

Điều quan trọng là đừng nhầm công dụng của nó. Chữ số kiểm tra đúng chỉ có nghĩa là chuỗi ký tự không mắc lỗi gõ, chứ không có nghĩa con số đó thuộc về một người có thật, cũng không có nghĩa một cơ quan nào đó sẽ chấp nhận nó. Một thuật toán sinh số hoàn toàn có thể tạo ra hàng nghìn giá trị qua được phép kiểm tra này mà không ứng với ai cả.

Với mục đích thử phần mềm, đó lại là điều hữu ích: bạn có dữ liệu đúng hình dạng để chạy qua biểu mẫu, mà không phải mượn thông tin của bất kỳ ai.

Một quốc gia có thể đổi định dạng không?

Có, và điều này xảy ra thường xuyên hơn người ta tưởng. Một nước có thể thêm chữ số, đổi cách đánh số, chuyển từ giấy sang thẻ, hoặc gộp hai loại giấy tờ thành một. Mỗi lần như vậy, dữ liệu cũ vẫn tồn tại song song với dữ liệu mới trong nhiều năm, vì người dân không đổi giấy tờ cùng một lúc.

Nghĩa là một bộ kiểm tra đúng vào thời điểm viết ra vẫn có thể sai sau vài năm, dù không ai sửa dòng nào. Cách phòng thủ là coi danh sách định dạng như dữ liệu có phiên bản chứ không phải hằng số nằm rải trong mã, và luôn có một nhánh xử lý cho trường hợp chưa biết định dạng.

Làm sao thử biểu mẫu với nhiều quốc gia?

Nếu bạn cần đầu vào đúng định dạng của nhiều nước để thử biểu mẫu, trình tạo dữ liệu danh tính và kiểm thử trực tuyến của trang này cho phép đổi quốc gia rồi tạo bản ghi mới, với số giấy tờ, địa chỉ và số điện thoại cùng thuộc một nước. Bạn có thể sinh liên tiếp nhiều mẫu để thử biểu mẫu với các độ dài và bộ ký tự khác nhau.

Dữ liệu tạo ra là dữ liệu tổng hợp do thuật toán sinh, chỉ dùng cho kiểm thử phần mềm, không tương ứng với người nào có thật và không dùng để mạo danh ai. Nếu bạn muốn xem định dạng của một nước cụ thể trước khi thử, hãy mở trang quốc gia như Brazil hoặc Nhật Bản để đối chiếu các trường.

Phần dành cho nhà phát triển

Sai lầm phổ biến nhất là đặt một độ dài cố định cho trường số giấy tờ. Cách sửa không phải là tìm ra con số đúng, mà là bỏ hẳn giả định rằng tồn tại một con số đúng. Hãy để trường đủ rộng cho mọi trường hợp bạn có thể gặp, rồi kiểm tra theo từng quốc gia khi bạn thật sự biết quy tắc của nước đó.

Những điểm khác nên chuẩn bị:

  • Lưu trữ dạng chuỗi, không phải dạng số. Số giấy tờ có thể bắt đầu bằng số 0, có thể chứa chữ cái, và bạn không bao giờ cần làm phép tính trên nó.
  • Chuẩn hóa trước khi so sánh: bỏ dấu cách, dấu chấm và gạch nối, thống nhất chuyện viết hoa, rồi mới đối chiếu.
  • Đặt quy tắc theo mã quốc gia trong một bảng dữ liệu riêng, và mặc định là chấp nhận khi chưa có quy tắc, thay vì từ chối.
  • Luôn có nhánh dự phòng cho định dạng chưa biết, kèm cách ghi nhận lại để bạn bổ sung quy tắc sau.
  • Nhớ rằng đúng định dạng không có nghĩa là đúng người. Đừng viết thông báo cho người dùng theo hướng ngụ ý rằng hệ thống đã xác minh được danh tính của họ.

Với những hệ thống có chữ số kiểm tra, hãy tách rõ hai bước: bước kiểm tra hình dạng và bước kiểm tra chữ số cuối. Như vậy khi một nước đổi quy tắc, bạn chỉ phải sửa một chỗ, và những nước không dùng chữ số kiểm tra vẫn chạy được.

Bước tiếp theo

Hãy rà lại những chỗ trong mã đang so sánh độ dài số giấy tờ với một con số cụ thể, và thay chúng bằng một bảng quy tắc theo quốc gia. Sau đó mở trình tạo dữ liệu danh tính, sinh mẫu từ vài nước khác nhau rồi cho chúng chạy qua biểu mẫu để xem chỗ nào còn chặn nhầm.

Đọc tiếp

Bài viết về Trình tạo dữ liệu danh tính và kiểm thử trực tuyến