Visuell mehrdeutige Zeichen in IDs verstehen
- Visuell mehrdeutige Zeichen sind Zeichen, die sich in bestimmten Schriftarten oder in handschriftlicher Form nur schwer unterscheiden lassen
- Dazu gehören etwa O/0, I/l/1/7, 5/S, 2/Z, 8/B, 6/G, 9/q/g
- Solche Zeichen können bei der Dateneingabe Fehler und Verwirrung verursachen
- Wenn Benutzer beispielsweise
O und 0 nur schwer unterscheiden können und dadurch einen falschen Code eingeben, führt das zu einer schlechten User Experience
- Besonders wichtig ist das in Situationen, in denen IDs mündlich übermittelt oder von Hand notiert werden müssen
- etwa im Kundensupport, bei Rabattcodes, Tracking-Codes, Fehler-IDs oder Produkt-IDs
Entscheidung über Groß-/Kleinschreibung
- Man muss entscheiden, ob IDs zwischen Groß- und Kleinbuchstaben unterscheiden sollen
- Mit Groß-/Kleinschreibung und unter Ausschluss visuell mehrdeutiger Zeichen stehen 53 Zeichen zur Auswahl
- Ohne Unterscheidung zwischen Groß- und Kleinbuchstaben stehen 22 Zeichen zur Auswahl
- Bei einer ID-Länge von 5 Zeichen ergibt das folgende Anzahl möglicher IDs:
- Mit Groß-/Kleinschreibung: 53^5 = 418,195,493
- Ohne Groß-/Kleinschreibung: 22^5 = 5,153,632
- Mit zunehmender ID-Länge wächst die Zahl möglicher IDs jedoch exponentiell
- Daher muss man einen sinnvollen Kompromiss zwischen ID-Länge und dem Risiko visuell mehrdeutiger Zeichen finden
- Werden sowohl Groß- als auch Kleinbuchstaben verwendet, können zudem unerwartete Probleme mit Drittsystemen entstehen, die nicht zwischen Groß- und Kleinbuchstaben unterscheiden
Ein visuell eindeutiger Zeichensatz
- Wenn Lesbarkeit Priorität hat, wird die Verwendung des folgenden Zeichensatzes empfohlen:
- [ "a", "b", "c", "d", "e", "f", "h", "i", "j", "k", "m", "n", "o", "p", "r", "s", "t", "w", "x", "y", "3", "4"]
Weitere Überlegungen
- Bestimmte Zeichenkombinationen können wie andere Zeichen aussehen (z. B. kann
rn wie m wirken, 3 wie w)
- Solche Kombinationen sollten daher möglichst schon bei der ID-Erzeugung vermieden werden
- Auch ähnlich klingende Zeichen sollte man vermeiden (z. B.
b und p)
- Das ist besonders wichtig, wenn IDs mündlich weitergegeben werden
Bestehende Beispiele
- Crockford's Base32: Dekodiert mehrdeutige Zeichen auf denselben Wert und berücksichtigt auch unbeabsichtigte Schimpfwörter
- Open Location Code: Verwendet den Zeichensatz
23456789CFGHJMPQRVWX. Ziel ist neben der Vermeidung visueller Mehrdeutigkeiten auch, die Bildung gewöhnlicher Wörter in natürlichen Sprachen zu verhindern. Allerdings sind 6/G und 9/Q enthalten.
Meinung von GN⁺
- Bei der Erzeugung von IDs sollten Nutzbarkeit und Lesbarkeit oberste Priorität haben. Das gilt besonders dann, wenn IDs häufig mündlich übermittelt oder handschriftlich festgehalten werden müssen.
- Es ist wichtig, einen Zeichensatz zu wählen, der visuelle Mehrdeutigkeiten minimiert, und zugleich einen angemessenen Kompromiss zwischen ID-Länge und der Anzahl möglicher Kombinationen zu finden.
- Da bei der Anbindung an Drittsysteme unerwartete Probleme auftreten können, sollte die Frage der Groß-/Kleinschreibung sorgfältig entschieden werden.
- Zusätzlich sollte die ID-Logik bestimmte Zeichenkombinationen ausschließen oder ähnlich klingende Zeichen vermeiden.
- Es ist sinnvoll, sich an Beispielen wie Crockford's Base32 oder Open Location Code zu orientieren und auf dieser Basis den optimalen Zeichensatz für die Anforderungen des jeweiligen Projekts zu entwerfen.
3 Kommentare
Das sieht auch gut aus: https://stackoverflow.com/a/58098360/8556340
Dass dabei sogar die Aussprache berücksichtigt wurde, ist wirklich erstaunlich.
Hacker-News-Kommentar
Math::Fleximal) erhielt jemand unerwartet Supportanfragen. Der Grund war, dass jemand Demo-Code zur Umwandlung von Hexadezimalwerten in alphanumerische Codes in Produktion eingesetzt hatte.