ID에서 시각적으로 모호한 문자 이해하기
- 시각적으로 모호한 문자란 특정 글꼴이나 손글씨에서 구별하기 어려운 문자들을 의미함
- O/0, I/l/1/7, 5/S, 2/Z, 8/B, 6/G, 9/q/g 등이 이에 해당
- 이런 문자들은 데이터 입력시 오류와 혼란을 야기할 수 있음
- 사용자가 'O'와 '0'을 구별하기 어려워 잘못된 코드를 입력하는 등 불편한 사용자 경험을 초래
- ID가 구두로 전달되거나 손으로 적어야 하는 상황에서 특히 중요함
- 고객지원, 할인코드, 추적코드, 에러ID, 제품ID 등
대소문자 구분 여부 결정하기
- ID에서 대소문자를 구분할지 여부를 결정해야 함
- 대소문자 구분시 시각적 모호성을 배제하고 선택 가능한 문자는 53개
- 대소문자 구분 없을 시 선택 가능한 문자는 22개
- ID 길이가 5자리일 경우 가능한 ID 수:
- 대소문자 구분: 53^5 = 418,195,493개
- 대소문자 구분 없음: 22^5 = 5,153,632개
- 그러나 ID 길이가 늘어날수록 가능한 ID 수는 기하급수적으로 증가함
- 따라서 ID 길이와 시각적 모호성 가능성 간의 절충점을 찾아야 함
- 또한 대소문자를 모두 사용하면 대소문자를 구분하지 않는 서드파티 시스템에서 예상치 못한 문제가 발생할 수 있음
시각적으로 명확한 문자 세트
- 가독성을 우선으로 할 경우 다음과 같은 문자 세트 사용 추천:
- [ "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)
기존 사례들
- Crockford's Base32: 모호한 문자를 동일한 값으로 디코딩하고, 우연한 욕설도 고려함
- Open Location Code: 23456789CFGHJMPQRVWX 문자 세트 사용. 시각적 모호성 회피와 함께 일반적인 언어의 단어 형성도 피하고자 함. 단 6/G, 9/Q는 포함.
GN⁺의 의견
- ID 생성에 있어 사용성과 가독성을 최우선으로 고려해야 함. 특히 ID가 구두로 전달되거나 손으로 기록되어야 하는 상황이 빈번하다면 더욱 그러함.
- 시각적 모호성을 최소화할 수 있는 문자 세트를 선택하되, ID의 길이와 가능한 조합의 수 사이에서 적절한 절충점을 찾는 게 중요함.
- 또한 서드파티 시스템과의 연동시 예상치 못한 이슈가 발생할 수 있으므로, 대소문자 구분 여부를 신중히 결정해야 함.
- ID 생성 로직에서 특정 문자 조합을 배제하거나, 발음이 유사한 문자를 피하는 등의 추가적인 고려도 필요함.
- Crockford's Base32나 Open Location Code 같은 사례를 참고해 프로젝트의 요구사항에 맞는 최적의 문자 세트를 설계하는 것이 바람직함.