Trình tạo số căn cước là công cụ sinh ra những mã định danh cá nhân mang đúng hình dạng mà một quốc gia quy định, kèm chữ số kiểm tra đúng theo thuật toán của quốc gia đó, để bạn có dữ liệu mà thử biểu mẫu nhập liệu, thử bộ xác thực và thử các luồng xác minh danh tính trên môi trường thử. Đây là loại dữ liệu khó dùng lại nhất trong tất cả các loại dữ liệu kiểm thử, bởi mỗi quốc gia có độ dài, bộ ký tự và quy tắc kiểm tra riêng, và một con số trông hợp lý ở nước này có thể là vô nghĩa ở nước khác. Đọc hết bài này, bạn sẽ nắm được vì sao không thể áp một cấu hình chung cho mọi quốc gia, chữ số kiểm tra thay đổi điều gì, một bản ghi hồ sơ cần những trường nào đi kèm con số định danh, và ranh giới cần giữ khi dữ liệu này được dùng trong kiểm thử quy trình xác minh danh tính.
Số căn cước của các nước khác nhau ở những điểm nào?
Việt Nam dùng số căn cước công dân gồm mười hai chữ số, trong đó phần đầu mã hóa thông tin về địa phương và giới tính, phần giữa là ngày sinh, và phần cuối là một dãy số phân biệt từng cá nhân. Cấu trúc này khiến con số định danh vừa là định danh vừa mang thông tin, và đó là điểm khác biệt quan trọng so với những hệ thống chỉ dùng một dãy số ngẫu nhiên.
Hoa Kỳ đi theo hướng ngược lại ở một khía cạnh quan trọng: số an sinh xã hội chỉ có dạng chín chữ số và không chứa chữ số kiểm tra theo thuật toán, cũng không mã hóa ngày sinh hay nơi sinh. Giá trị của nó nằm ở những dải số đã được cơ quan cấp phát dành riêng cho mục đích thử nghiệm hoặc cho các trường hợp đặc biệt, và một công cụ sinh dữ liệu tốt phải biết tránh những dải số không bao giờ được cấp thật. Bài định dạng số an sinh xã hội và các dải dành riêng đi sâu vào chủ đề này.
Brazil dùng mã số cá nhân gồm mười một chữ số với hai chữ số kiểm tra được tính từ các chữ số còn lại, và mã số doanh nghiệp cùng quốc gia đó có độ dài khác. Thổ Nhĩ Kỳ dùng một mã định danh gồm mười một chữ số với quy tắc kiểm tra riêng và một ràng buộc về chữ số đầu tiên. Tây Ban Nha dùng một mã gồm tám chữ số cộng một ký tự chữ cái kiểm tra, và với người nước ngoài thì mã bắt đầu bằng một chữ cái. Indonesia dùng mã mười sáu chữ số có thể tách thành các nhóm mang thông tin về khu vực và ngày sinh.
Nhìn chung, ba trục khác nhau tạo ra sự đa dạng này. Trục thứ nhất là độ dài, từ tám tới mười tám ký tự. Trục thứ hai là bộ ký tự, khi có quốc gia dùng thuần chữ số còn quốc gia khác trộn chữ cái. Trục thứ ba là mức độ mà con số mang thông tin có cấu trúc, từ những hệ thống chỉ là dãy số tăng dần cho tới những hệ thống mã hóa ngày sinh, giới tính và địa phương. Bài độ dài mã định danh theo quốc gia trình bày ba trục này dưới dạng bảng đối chiếu.
Vì sao không thể dùng một cấu hình chung cho mọi quốc gia?
Điều hay xảy ra là nhóm phát triển chọn một độ dài duy nhất, thường là độ dài của quốc gia họ hoạt động nhiều nhất, rồi áp cho mọi quốc gia. Khi mở rộng sang thị trường thứ hai, họ phát hiện rằng một nửa số khách hàng tiềm năng không nhập được mã định danh của mình, và bản sửa chữa thường được làm vội bằng cách nới giới hạn độ dài cho tất cả các nước.
Việc nới đồng loạt có cái giá của nó. Khi giới hạn không còn phân biệt theo quốc gia, bạn mất khả năng phát hiện lỗi gõ sớm, mất khả năng gợi ý định dạng đúng cho người dùng, và mất khả năng phân biệt giữa một mã định danh sai định dạng với một mã định danh chưa từng tồn tại. Về lâu dài, chi phí sửa chữa những lỗi dữ liệu lọt qua sẽ lớn hơn nhiều so với công sức cấu hình đúng ngay từ đầu.
Cách làm bền vững là coi quy tắc định dạng của từng quốc gia như dữ liệu chứ không như hằng số trong mã nguồn. Mỗi quốc gia nên có một bản mô tả riêng gồm độ dài, bộ ký tự cho phép, cách định dạng để hiển thị, và thuật toán kiểm tra nếu có. Bản mô tả đó cần cập nhật được mà không phải phát hành lại phần mềm, vì quy tắc định danh của các quốc gia thay đổi theo thời gian.
Một hệ quả nữa của việc cấu hình theo quốc gia là dữ liệu thử cũng phải theo cùng logic đó. Nếu công cụ sinh dữ liệu của bạn dùng một mô hình chung, nó sẽ tạo ra những mã trông rất giống thật nhưng không qua được bộ xác thực của chính hệ thống bạn đang thử, và bạn sẽ mất thời gian truy nguyên một lỗi không tồn tại. Bài độ nhất quán giữa các trường định danh bàn về việc giữ cho các trường trong một bản ghi khớp nhau theo cùng một quốc gia.
Chữ số kiểm tra quan trọng đến mức nào?
Rất nhiều hệ thống định danh quốc gia dùng một chữ số hoặc một ký tự kiểm tra được tính từ các ký tự còn lại. Mục đích của nó rất giống chữ số kiểm tra trong số thẻ: phát hiện lỗi gõ và lỗi đảo vị trí, chứ không xác nhận rằng người đó tồn tại. Điều này đúng với mã số cá nhân của Brazil, mã định danh của Thổ Nhĩ Kỳ, mã số thuế của nhiều quốc gia, và cả những hệ thống dùng chữ cái làm ký tự kiểm tra.
Vì vậy, một dãy số đơn giản như chín chữ số liên tiếp từ một tới chín sẽ bị mọi bộ xác thực từ chối, dù nó trông có vẻ hợp lệ với người không quen định dạng. Đây là sai lầm phổ biến nhất khi có người tự nghĩ ra dữ liệu mẫu bằng tay. Nhóm kiểm thử đặt dữ liệu đó vào biểu mẫu, biểu mẫu báo lỗi, và cả nhóm mất nửa ngày để tranh luận xem lỗi nằm ở bộ xác thực hay ở biểu mẫu, trong khi nguyên nhân thật là dữ liệu đầu vào.
Một sai lầm nữa là sinh dãy số đúng độ dài nhưng không tính chữ số kiểm tra, rồi bật một chế độ bỏ qua kiểm tra trong môi trường thử để mọi thứ chạy được. Cách này nguy hiểm vì nó tạo ra một môi trường thử khác với môi trường thật ở đúng chỗ dễ sai nhất. Khi lên môi trường thật, các phép kiểm tra được bật lại, và những lỗi mà lẽ ra phải lộ ra từ lâu mới xuất hiện cùng lúc. Bài quy tắc xác thực mã định danh theo quốc gia trình bày cách tổ chức các phép kiểm tra này theo từng nước.
Một bản ghi hồ sơ cần những trường nào đi cùng số căn cước?
Số định danh không đứng một mình. Trong một hồ sơ dùng cho kiểm thử, nó đi kèm họ tên, ngày sinh, giới tính, quốc tịch, địa chỉ thường trú, số điện thoại và đôi khi cả ảnh chân dung trong dữ liệu mô phỏng. Các trường này có quan hệ với nhau, và mối quan hệ quan trọng nhất là chúng phải cùng thuộc một quốc gia.
Với những hệ thống mã định danh có mã hóa thông tin, quan hệ này còn chặt hơn. Nếu mã định danh mã hóa ngày sinh, thì ngày sinh trong hồ sơ phải khớp với ngày sinh được mã hóa trong con số. Nếu mã mã hóa giới tính hoặc địa phương, hai trường đó cũng phải khớp. Đây là loại lỗi mà một bộ kiểm thử tốt có thể phát hiện, và nó chỉ phát hiện được nếu dữ liệu thử của bạn cũng được dựng theo cùng quy tắc.
Có một nhóm trường nữa hay bị bỏ qua là các trường về thời hạn và trạng thái. Giấy tờ tùy thân có ngày cấp, ngày hết hạn và tình trạng còn hiệu lực hay không. Hồ sơ dùng cho kiểm thử nên có những trường này, vì phần lớn luồng xác minh thật sự đọc chúng. Một hồ sơ thiếu ngày hết hạn sẽ khiến hệ thống của bạn bỏ qua một nhánh xử lý quan trọng mà bạn tưởng mình đã kiểm thử.
Dùng số căn cước tổng hợp trong kiểm thử cần lưu ý gì?
Ranh giới quan trọng nhất là mục đích. Dữ liệu định danh tổng hợp dùng để thử phần mềm của chính bạn: biểu mẫu, phép kiểm tra định dạng, luồng lưu trữ, luồng hiển thị và luồng trình diễn. Nó không thay thế được bất kỳ bước xác minh danh tính nào do cơ quan hay tổ chức thật thực hiện, và không được dùng để mở tài khoản thật, để mạo danh một người cụ thể, hay để đánh lừa một hệ thống chống gian lận.
Ranh giới thứ hai là nguồn gốc dữ liệu. Ngay cả trong môi trường thử, đừng dùng số định danh của người thật, kể cả của chính bạn hay của đồng nghiệp đã đồng ý. Môi trường thử thường được sao chép và chia sẻ rộng, và một con số định danh thật một khi đã nằm trong đó sẽ lan ra ngoài tầm kiểm soát. Bài dữ liệu tổng hợp và dữ liệu ẩn danh giải thích vì sao việc che bớt dữ liệu thật không giải quyết được vấn đề này.
Ranh giới thứ ba là lưu trữ. Dữ liệu tổng hợp không phải dữ liệu cá nhân, nên nhìn chung nó nhẹ gánh hơn về mặt tuân thủ, nhưng các quy định bảo vệ dữ liệu vẫn áp dụng cho môi trường mà nó nằm trong, và một bản ghi tổng hợp bị trộn với dữ liệu thật sẽ kéo theo toàn bộ nghĩa vụ của dữ liệu thật. Bài quy định bảo vệ dữ liệu và dữ liệu định danh thử bàn về điểm này cùng những thực hành đáng làm.
Làm sao đưa dữ liệu này vào bộ kiểm thử tự động?
Điều nên chốt trước tiên là mỗi bản ghi phải được sinh như một khối, không phải từng trường rời. Nếu bạn lấy ngẫu nhiên một họ tên từ danh sách này rồi ghép với một con số định danh lấy từ danh sách khác, bạn sẽ sớm có những bản ghi vô nghĩa: một người trưởng thành mang tên của một đứa trẻ, hoặc một con số định danh mã hóa một ngày sinh khác hẳn với ngày sinh trong hồ sơ.
Điều thứ hai là cố định đầu vào sinh dữ liệu. Với dữ liệu dùng cho kiểm thử tự động, hãy giữ nguyên khóa sinh để mỗi lần chạy cho ra cùng một bộ bản ghi. Đây là điều kiện để bạn tái hiện được một lỗi, và nó đặc biệt quan trọng với dữ liệu định danh vì những lỗi liên quan tới chữ số kiểm tra thường chỉ xuất hiện ở một vài bản ghi đặc biệt trong tập hợp lớn. Bài dữ liệu định danh cho kiểm thử là gì và dùng khi nào trình bày cách tổ chức một bộ mẫu như vậy.
Điều thứ ba là ghi lại nguồn gốc tổng hợp ngay trong dữ liệu, chẳng hạn một trường đánh dấu bản ghi là dữ liệu thử. Trường này giúp bạn lọc ra và xóa sạch khi cần, đồng thời ngăn một bản ghi thử lọt vào môi trường thật theo đường xuất tệp hoặc sao lưu. Với dữ liệu định danh, một bản ghi lọt nhầm vào môi trường thật có thể gây hậu quả nghiêm trọng hơn nhiều so với một địa chỉ sai.
Điều thứ tư là sinh cả những bản ghi xấu. Bộ dữ liệu chỉ toàn trường hợp đẹp sẽ không phát hiện lỗi nào, nên hãy chuẩn bị ca mã định danh sai chữ số kiểm tra, ca sai độ dài, ca chứa ký tự không được phép, ca trường để trống, và ca ngày sinh ở rìa khoảng hợp lệ. Với mỗi ca, hãy ghi rõ hệ thống nên chấp nhận hay từ chối trước khi viết phép kiểm tra.
Bước tiếp theo
Hãy mở trình tạo dữ liệu định danh, chọn quốc gia bạn cần, rồi sinh vài bản ghi và kiểm tra lần lượt độ dài, bộ ký tự và chữ số kiểm tra của từng con số. Sau đó thử nhập một bản ghi vào biểu mẫu của bạn và quan sát xem hệ thống có kiểm tra chữ số kiểm tra ở tầng máy khách, ở tầng máy chủ, hay không kiểm tra ở đâu cả.
Toàn bộ dữ liệu do trang này sinh ra là dữ liệu kiểm thử tổng hợp: định dạng và chữ số kiểm tra được dựng đúng theo quy tắc của quốc gia được chọn, nhưng bản ghi không ứng với người nào có thật, không được cơ quan nào cấp, không dùng được cho bất kỳ thủ tục hành chính thật nào, và chỉ nên dùng cho việc thử phần mềm, thử biểu mẫu và trình diễn giao diện.