Dữ liệu họ tên theo quốc gia là thứ mà rất nhiều biểu mẫu xử lý sai, và lý do thường giống nhau: người viết biểu mẫu chỉ nghĩ tới cách gọi tên ở nước mình. Bài này đi qua những khác biệt thật sự ảnh hưởng tới việc lưu trữ và hiển thị, từ thứ tự họ tên tới dấu phụ, để bạn thấy trước những chỗ cần quyết định.
Thứ tự họ và tên khác nhau thế nào?
Ở nhiều nước phương Tây, tên riêng đứng trước và họ đứng sau. Ở Đông Á, thứ tự ngược lại: họ được viết trước, rồi mới tới tên. Hungary cũng theo cách viết họ trước trong khi các nước châu Âu láng giềng thì không. Điều này không chỉ là thói quen khi viết, mà ảnh hưởng trực tiếp tới việc bạn lưu trường nào là họ và trường nào là tên.
Nếu biểu mẫu của bạn có hai ô riêng cho họ và tên, người dùng ở nơi viết họ trước sẽ có lúc nhập ngược, hoặc nhập cả hai vào ô đầu rồi để ô sau trống. Cách làm bớt rủi ro là ghi nhãn rõ ràng theo từng ngôn ngữ thay vì dùng một cặp nhãn chung, và cho phép người dùng sửa lại khi thấy bản xem trước bị đảo.
Trên thực tế, rất nhiều hệ thống chỉ cần một trường để hiển thị tên đầy đủ và một trường riêng để sắp xếp. Hai mục đích khác nhau thì nên có hai trường khác nhau, thay vì cố nhồi cả hai vào một chỗ rồi đoán ý khi cần sắp xếp.
Khi nào một người chỉ có một tên?
Không phải ai cũng có hai phần tên. Ở một số nền văn hóa, một người có thể chỉ có một tên duy nhất, và đó là tên hợp pháp đầy đủ của họ. Có nơi khác, tên gọi trong ngày thường chỉ là một từ, còn phần còn lại chỉ xuất hiện trên giấy tờ trong những dịp trang trọng.
Với những hệ thống bắt buộc cả họ và tên, nhóm người này bị chặn ngay ở bước đăng ký. Họ thường chọn cách nhập lại tên mình hai lần hoặc thêm một dấu gạch để qua bước kiểm tra, và kết quả là dữ liệu về sau trở nên khó đọc, khó tìm, khó in trên giấy tờ.
Cách xử lý đơn giản là đừng bắt buộc cả hai trường. Nếu nghiệp vụ thật sự cần một tên để in, hãy kiểm tra sự tồn tại của tên đầy đủ, chứ đừng kiểm tra xem có đủ hai phần hay không.
Tên đệm, phụ danh và họ ghép được viết ra sao?
Ngoài họ và tên, nhiều hệ thống tên còn có các thành phần khác. Ở một số nước, người ta có phụ danh dựa trên tên cha hoặc mẹ, và thành phần này đứng giữa họ và tên. Nhiều nơi cho phép họ ghép, hoặc nối hai họ bằng dấu gạch nối, và một số quy định coi họ ghép là một khối không tách rời.
Điều này làm khái niệm tên đệm trở nên mơ hồ. Trong tiếng Việt, phần đệm giữa họ và tên gọi có vai trò riêng, thường dùng để phân biệt các nhánh trong cùng một dòng họ. Nếu hệ thống của bạn coi đó là tên phụ không quan trọng rồi bỏ đi khi hiển thị, tên in ra sẽ sai.
Cách tiếp cận an toàn là coi tên đầy đủ như một chuỗi có cấu trúc mà bạn không hoàn toàn kiểm soát, chỉ tách phần bạn thật sự cần cho từng mục đích cụ thể. Đừng xây dựng các phép kiểm tra dựa trên giả định rằng tên luôn có đúng hai hoặc ba từ.
Vì sao cùng một cái tên lại có nhiều cách viết?
Nhiều ngôn ngữ dùng dấu phụ, và trên máy tính, cùng một ký tự có dấu có thể được lưu bằng hai cách khác nhau: một ký tự đã gộp sẵn dấu, hoặc một ký tự cơ bản kèm dấu tách rời. Hai cách này trông giống hệt nhau trên màn hình nhưng lại là hai chuỗi khác nhau khi so sánh, nên việc tìm kiếm và chống trùng có thể thất bại dù người dùng gõ đúng.
Thêm vào đó, khi tên được chuyển từ chữ không phải chữ Latinh sang chữ Latinh, có nhiều hệ chuyển tự khác nhau cùng tồn tại. Cùng một tên có thể được viết thành vài dạng, và cả vài dạng đó đều đúng theo một hệ thống nào đó.
Cuối cùng là chuyện viết hoa. Không phải ngôn ngữ nào cũng chuyển chữ hoa theo cùng một quy tắc, và có trường hợp một phép chuyển đổi ngây thơ làm mất thông tin phân biệt giữa hai từ khác nhau. Vì vậy, việc so sánh tên nên dựa trên dạng đã chuẩn hóa và đã bỏ dấu, chứ không dựa trên chuỗi nguyên văn.
Làm sao có mẫu họ tên đa dạng để thử biểu mẫu?
Nếu bạn cần tên thuộc nhiều quốc gia để 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 sinh tên theo đúng quốc gia bạn chọn, kèm cách viết hoa và bộ ký tự của ngôn ngữ đó. Bạn có thể đổi qua lại giữa các quốc gia để thử cùng một biểu mẫu với nhiều cấu trúc tên khác nhau.
Dữ liệu tạo ra là dữ liệu tổng hợp, chỉ dùng cho kiểm thử phần mềm và trình diễn, không ứng với người có thật và không dùng để mạo danh ai. Vì vậy đừng dùng nó trong bất kỳ luồng nào đòi hỏi danh tính thật.
Một cách thử thực tế: sinh một mẫu ở quốc gia viết họ trước như Nhật Bản, một mẫu ở Hungary cũng viết họ trước, rồi so với một mẫu ở quốc gia viết tên trước. Nếu giao diện của bạn hiển thị đúng ở cả ba trường hợp, phần còn lại thường chỉ là vấn đề độ dài.
Phần dành cho nhà phát triển
Điều nên quyết định trước khi viết mã là bạn cần tên để làm gì. Hiển thị, sắp xếp, tìm kiếm và in giấy tờ là bốn mục đích khác nhau, và chúng có thể cần những trường khác nhau. Cố dùng một trường cho cả bốn thường dẫn tới một giải pháp vừa phức tạp vừa sai.
Vài điểm nên chốt:
- Cho phép trường họ hoặc trường tên để trống, và chỉ bắt buộc một trường tên đầy đủ khi nghiệp vụ thật sự cần.
- Chuẩn hóa tên về một dạng thống nhất trước khi so sánh hoặc chống trùng, thay vì so chuỗi nguyên văn.
- Đừng suy ra giới tính từ tên, và đừng suy ra quốc tịch từ họ. Cả hai đều sai thường xuyên và gây hậu quả thật với người dùng.
- Đặt độ dài tối đa đủ rộng cho tên dài và tên ghép, vì giới hạn chật sẽ cắt mất phần cuối của tên mà không báo lỗi.
- Khi hiển thị, giữ nguyên dấu phụ trong tên. Việc bỏ dấu chỉ nên diễn ra ở lớp so sánh, không phải ở lớp hiển thị.
Một chi tiết hay bị bỏ qua: nhiều hệ thống kiểm tra tên bằng cách chỉ cho phép chữ cái Latinh không dấu. Cách này vô tình chặn gần hết người dùng ngoài khu vực đó. Nếu bạn muốn chặn ký tự đặc biệt, hãy chặn theo danh sách cụ thể thay vì theo một khoảng chữ cái hẹp.
Bước tiếp theo
Hãy thử nhập một tên có dấu, một tên chỉ một từ, và một họ ghép vào chính biểu mẫu của bạn để xem nó phản ứng thế nào. Sau đó mở trình tạo dữ liệu danh tính, sinh vài bản ghi ở những quốc gia khác nhau, và đối chiếu chúng với cách hệ thống đang lưu và hiển thị tên.