- 버그 신고, 할인 코드 입력, 배송 추적처럼 사람이 ID를 읽고 전달하는 과정에서는
O/0,I/l/1/7같은 시각적 모호성이 쉽게 입력 오류로 이어짐 - 혼동은 글꼴과 손글씨에 따라 커지며,
5/S,2/Z,8/B,6/G,9/q/g처럼 구분이 흐려지는 조합이 반복적으로 나타남 - 고객지원, 오류 ID, 제품 ID처럼 사람이 직접 다루는 ID에서는 무작정 큰 문자 집합보다 읽기 쉬운 문자 집합을 고르는 편이 실사용 품질에 더 중요함
- 대소문자를 구분하면 5자 ID에서
418,195,493개 조합을 만들 수 있지만, 구분하지 않으면5,153,632개로 줄어들어 길이와 안전성의 절충이 필요함 - 대소문자 구분 ID는 짧게 만들기 좋지만, 일부 서드파티 시스템이나 프로토콜이 대소문자 비구분으로 동작할 수 있어 통합 단계에서 문제가 생길 수 있음
사람이 읽는 ID에서 생기는 문자 혼동
- ID를 버그 리포트, 할인 코드 입력, 배송 추적 같은 시스템 상호작용에서 적거나 전달할 때, 피할 수 있는 문자 혼동이 사용자 경험을 망칠 수 있음
- 대표적인 시각적 모호 문자 조합은 다음과 같음
O/0: 슬래시나 점이 없는 0에서는 글자O와 숫자0이 비슷해 보일 수 있음I/l/1/7: 대문자I, 소문자l, 숫자1, 숫자7은 여러 인쇄물과 손글씨에서 구분하기 어려움5/S,2/Z,8/B,6/G,9/q/g: 특정 글꼴, 스타일화된 폰트, 손글씨에서 혼동될 수 있음
- 예시 문자열
9qg6G8B2Z5SIl170O는 Arial, Helvetica, Courier, Times, Verdana, Georgia, Tahoma, Impact, Comic Sans 같은 여러 시스템 글꼴에서 비교 대상으로 사용됨 I와l처럼 일부 조합은 여러 글꼴에서 계속 모호하게 보일 수 있고,9qg처럼 직접 손으로 쓰면 더 헷갈리는 조합도 있음-
-
특히 문제가 커지는 ID 유형
- 고객지원에서 주고받는 할인 코드
- 배송이나 물류에서 쓰는 추적 코드
- 문제 재현과 문의 처리에 필요한 오류 ID
- 제품 식별에 쓰이는 제품 ID
-
대소문자 구분과 문자 집합의 절충
- ID가
abc와ABC를 같은 값으로 볼지 여부는 생성 규칙을 정할 때 함께 결정해야 함 - 대소문자를 구분하면서 시각적으로 모호한 문자를 제외하면 선택 가능한 문자는 53개임
- 대소문자를 구분하지 않으면 선택 가능한 문자는 22개로 줄어듦
- ID 길이에 따른 가능한 조합 수는 다음과 같음
- 5자, 대소문자 구분:
53^5 = 418,195,493 - 5자, 대소문자 비구분:
22^5 = 5,153,632 - 8자, 대소문자 구분:
53^8 = 62,259,690,411,361 - 8자, 대소문자 비구분:
22^8 = 54,875,873,536
- 5자, 대소문자 구분:
- 결국 선택지는 짧지만 혼동 가능성이 큰 ID와 길지만 읽기 쉬운 ID 사이의 균형임
- 대소문자를 모두 쓰면 언젠가 대소문자 비구분 서드파티 시스템이나 프로토콜에서 예상 밖 동작을 만날 수 있음
- 한 상용 시스템은 사용자가
iD와id를 서로 다른 ID로 선택할 수 있게 했지만, 존재하지 않는 ID 조회 시 대소문자 비구분 매칭을 수행해 잘못된 데이터를 반환했음 - 해당 버그에는 “편의”를 위한 동작이라는 답이 돌아왔음
- 한 상용 시스템은 사용자가
문자 하나가 아니라 조합도 피해야 할 수 있음
- 문자 조합 자체가 다른 문자처럼 보이는 경우도 있음
rn은m처럼 보일 수 있음vv는w처럼 보일 수 있음
- 이런 이유만으로 문자를 대거 제외하면 선택 가능한 문자 집합이 너무 줄어들 수 있으므로, 생성 단계에서 특정 조합만 피하는 방식이 더 현실적일 수 있음
- 말로 전달하는 상황에서는 음성 유사성도 함께 고려할 수 있음
- 예를 들어
b와p는 소리 내어 말할 때 비슷하게 들릴 수 있음
- 예를 들어
참고할 만한 기존 방식
- Crockford의 Base32는 모호한 문자를 같은 값으로 디코딩하고, 우발적인 외설 표현 문제도 고려함
- Open Location Code는
23456789CFGHJMPQRVWX문자 집합을 사용함- 이 문자 집합은 시각적으로 모호한 문자를 피하고 일반 언어의 단어 철자도 피하도록 선택됨
- 다만
6과G,9와Q를 모두 포함함