Hiểu các ký tự dễ gây nhầm lẫn về mặt thị giác trong ID
- Ký tự dễ gây nhầm lẫn về mặt thị giác là những ký tự khó phân biệt trong một số phông chữ hoặc chữ viết tay nhất định
- O/0, I/l/1/7, 5/S, 2/Z, 8/B, 6/G, 9/q/g là các ví dụ điển hình
- Những ký tự này có thể gây ra lỗi và sự nhầm lẫn khi nhập dữ liệu
- Ví dụ, người dùng khó phân biệt giữa 'O' và '0' nên nhập sai mã, dẫn đến trải nghiệm người dùng kém
- Điều này đặc biệt quan trọng trong các tình huống ID được truyền đạt bằng lời nói hoặc phải viết tay
- như hỗ trợ khách hàng, mã giảm giá, mã theo dõi, error ID, product ID, v.v.
Quyết định có phân biệt chữ hoa chữ thường hay không
- Cần quyết định liệu ID có phân biệt chữ hoa chữ thường hay không
- Nếu phân biệt chữ hoa chữ thường và loại bỏ tính mơ hồ thị giác, số ký tự có thể chọn là 53
- Nếu không phân biệt chữ hoa chữ thường, số ký tự có thể chọn là 22
- Nếu độ dài ID là 5 ký tự, số lượng ID có thể có là:
- Phân biệt chữ hoa chữ thường: 53^5 = 418,195,493
- Không phân biệt chữ hoa chữ thường: 22^5 = 5,153,632
- Tuy nhiên, khi độ dài ID tăng lên, số lượng ID khả dụng cũng tăng theo cấp số nhân
- Vì vậy cần tìm điểm cân bằng giữa độ dài ID và khả năng xảy ra mơ hồ thị giác
- Ngoài ra, nếu dùng cả chữ hoa lẫn chữ thường, có thể phát sinh những vấn đề ngoài dự kiến với các hệ thống bên thứ ba không phân biệt chữ hoa chữ thường
Tập ký tự rõ ràng về mặt thị giác
- Nếu ưu tiên khả năng đọc, nên dùng tập ký tự sau:
- [ "a", "b", "c", "d", "e", "f", "h", "i", "j", "k", "m", "n", "o", "p", "r", "s", "t", "w", "x", "y", "3", "4"]
Các điểm cần cân nhắc thêm
- Một số tổ hợp ký tự có thể trông giống ký tự khác (ví dụ: rn trông như m, 3 trông như w)
- Tốt nhất nên tránh các tổ hợp này ở bước tạo ID
- Cũng nên tránh các ký tự có cách phát âm giống nhau (ví dụ: b và p)
- Điều này đặc biệt quan trọng khi ID được truyền đạt bằng lời nói
Các trường hợp thực tế hiện có
- Crockford's Base32: giải mã các ký tự mơ hồ thành cùng một giá trị, đồng thời cũng cân nhắc việc vô tình tạo ra từ ngữ tục tĩu
- Open Location Code: sử dụng tập ký tự 23456789CFGHJMPQRVWX. Mục tiêu là tránh mơ hồ thị giác đồng thời tránh tạo thành từ trong các ngôn ngữ phổ biến. Tuy nhiên vẫn bao gồm 6/G và 9/Q.
Ý kiến của GN⁺
- Khi tạo ID, cần ưu tiên hàng đầu cho tính dễ dùng và khả năng đọc, đặc biệt nếu ID thường xuyên phải được truyền miệng hoặc ghi chép bằng tay.
- Nên chọn tập ký tự giúp giảm tối đa sự mơ hồ thị giác, đồng thời tìm được điểm cân bằng hợp lý giữa độ dài ID và số lượng tổ hợp có thể tạo ra.
- Ngoài ra, khi tích hợp với hệ thống bên thứ ba, có thể phát sinh những vấn đề ngoài dự kiến, vì vậy cần cân nhắc cẩn thận việc có phân biệt chữ hoa chữ thường hay không.
- Cũng cần xem xét thêm việc loại trừ một số tổ hợp ký tự nhất định trong logic tạo ID, hoặc tránh các ký tự có cách phát âm gần giống nhau.
- Nên tham khảo các ví dụ như Crockford's Base32 hoặc Open Location Code để thiết kế tập ký tự tối ưu phù hợp với yêu cầu của dự án.
3 bình luận
Cái này cũng có vẻ hay: https://stackoverflow.com/a/58098360/8556340
Việc còn tính cả cách phát âm nữa thì thật sự quá kinh ngạc.
Ý kiến trên Hacker News
Math::Fleximal) được đăng lên CPAN cho vui. Nguyên nhân là ai đó đã dùng mã demo chuyển đổi hệ thập lục phân sang mã chữ-số trong môi trường production.