ทำความเข้าใจอักขระที่กำกวมทางสายตาใน ID
- อักขระที่กำกวมทางสายตาหมายถึงอักขระที่แยกแยะได้ยากในฟอนต์บางแบบหรือลายมือ
- เช่น O/0, I/l/1/7, 5/S, 2/Z, 8/B, 6/G, 9/q/g
- อักขระเหล่านี้อาจก่อให้เกิดข้อผิดพลาดและความสับสนระหว่างการป้อนข้อมูล
- เช่น ผู้ใช้แยกไม่ออกระหว่าง 'O' กับ '0' จึงกรอกรหัสผิด ส่งผลให้ประสบการณ์ผู้ใช้ไม่ดี
- เรื่องนี้สำคัญเป็นพิเศษในสถานการณ์ที่ต้องสื่อสาร ID ด้วยวาจาหรือเขียนด้วยมือ
- เช่น ฝ่ายบริการลูกค้า, โค้ดส่วนลด, รหัสติดตาม, error ID, product ID เป็นต้น
การตัดสินใจว่าจะให้แยกตัวพิมพ์เล็ก-ใหญ่หรือไม่
- ต้องตัดสินใจก่อนว่า ID จะต้องแยกตัวพิมพ์เล็ก-ใหญ่หรือไม่
- หากแยกตัวพิมพ์เล็ก-ใหญ่ และตัดอักขระที่กำกวมทางสายตาออก จะเหลืออักขระให้เลือก 53 ตัว
- หากไม่แยกตัวพิมพ์เล็ก-ใหญ่ จะเหลืออักขระให้เลือก 22 ตัว
- หาก ID มีความยาว 5 ตัว จำนวน ID ที่เป็นไปได้คือ:
- แยกตัวพิมพ์เล็ก-ใหญ่: 53^5 = 418,195,493 แบบ
- ไม่แยกตัวพิมพ์เล็ก-ใหญ่: 22^5 = 5,153,632 แบบ
- อย่างไรก็ตาม เมื่อความยาวของ ID เพิ่มขึ้น จำนวน ID ที่เป็นไปได้จะเพิ่มขึ้นแบบทวีคูณ
- ดังนั้นจึงต้องหาจุดสมดุลระหว่างความยาวของ ID กับโอกาสเกิดความกำกวมทางสายตา
- นอกจากนี้ หากใช้ทั้งตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ อาจเกิดปัญหาที่คาดไม่ถึงกับระบบของ third-party ที่ไม่แยกตัวพิมพ์เล็ก-ใหญ่
ชุดอักขระที่มองเห็นชัดเจน
- หากให้ความสำคัญกับความอ่านง่ายเป็นอันดับแรก แนะนำให้ใช้ชุดอักขระดังต่อไปนี้:
- [ "a", "b", "c", "d", "e", "f", "h", "i", "j", "k", "m", "n", "o", "p", "r", "s", "t", "w", "x", "y", "3", "4"]
ข้อพิจารณาเพิ่มเติม
- ชุดอักขระบางแบบเมื่อวางติดกันอาจดูเหมือนเป็นอักขระอื่นได้ (เช่น rn ดูเหมือน m, 3 ดูเหมือน w)
- จึงควรหลีกเลี่ยงชุดดังกล่าวตั้งแต่ขั้นตอนสร้าง ID
- ควรหลีกเลี่ยงอักขระที่ออกเสียงคล้ายกันด้วย (เช่น b กับ p)
- สำคัญเป็นพิเศษเมื่อมีการสื่อสาร ID ด้วยวาจา
กรณีศึกษาที่มีอยู่แล้ว
- Crockford's Base32: ถอดรหัสอักขระที่กำกวมให้เป็นค่าเดียวกัน และยังคำนึงถึงคำหยาบที่อาจเกิดขึ้นโดยไม่ตั้งใจ
- Open Location Code: ใช้ชุดอักขระ 23456789CFGHJMPQRVWX โดยตั้งใจหลีกเลี่ยงทั้งความกำกวมทางสายตาและการเกิดเป็นคำในภาษาทั่วไป แม้จะยังมี 6/G, 9/Q รวมอยู่ด้วย
ความเห็นของ GN⁺
- ในการสร้าง ID ควรให้ความสำคัญกับการใช้งานและความอ่านง่ายเป็นอันดับแรก โดยเฉพาะเมื่อมีกรณีที่ต้องสื่อสาร ID ด้วยวาจาหรือจดบันทึกด้วยมืออยู่บ่อยครั้ง
- ควรเลือกชุดอักขระที่ช่วยลดความกำกวมทางสายตาให้มากที่สุด พร้อมหาจุดสมดุลที่เหมาะสมระหว่างความยาวของ ID กับจำนวนชุดค่าที่เป็นไปได้
- อีกทั้งการเชื่อมต่อกับระบบ third-party อาจทำให้เกิดปัญหาที่ไม่คาดคิดได้ จึงควรตัดสินใจเรื่องการแยกตัวพิมพ์เล็ก-ใหญ่ให้รอบคอบ
- นอกจากนี้ยังควรพิจารณาเพิ่มเติม เช่น การตัดชุดอักขระบางแบบออกจากตรรกะการสร้าง ID หรือหลีกเลี่ยงอักขระที่ออกเสียงคล้ายกัน
- การอ้างอิงกรณีอย่าง Crockford's Base32 หรือ Open Location Code เพื่อนำมาออกแบบชุดอักขระที่เหมาะกับความต้องการของโปรเจกต์ ถือเป็นแนวทางที่เหมาะสม
3 ความคิดเห็น
อันนี้ก็ดูน่าสนใจเหมือนกันครับ : https://stackoverflow.com/a/58098360/8556340
น่าทึ่งจริง ๆ ที่คำนึงถึงแม้กระทั่งการออกเสียง
ความเห็นจาก Hacker News
Math::Fleximal) สาเหตุคือมีคนนำโค้ดเดโมที่แปลงเลขฐานสิบหกเป็นโค้ดตัวอักษรและตัวเลขไปใช้ในโปรดักชัน