Frage

Ich bin mit UUIDs, aber sie sind nicht besonders schön zu lesen, schreiben und zu kommunizieren. So würde Ich mag sie kodieren. Ich konnte verwenden base64 oder base32, aber sie würden ohnehin nicht einfach sein: base64 hat Großbuchstaben und Symbolen. Base32 ist ein bisschen besser, aber man kann immer noch unbeholfen Sachen erhalten.

ich mich gefragt, ob es eine schöne und saubere Art und Weise ist eine Zahl in schmackhafte Phoneme zu kodieren, so ein bessere Lesbarkeit zu erreichen und hoffentlich ein bisschen Kompression.

War es hilfreich?

Lösung

Blase Babble ist gut zu versuchen. Es erzeugt unsinnig, aber lesbare Ausgabe wie:

xesef-disof-gytuf-katof-movif-baxux

Andere Tipps

Ich hoffe, dass Sie nicht über diese Idee verwenden: den automatisierten Fluch Generator :)

Warum nicht etwas verwenden, ähnlich dem, was PGP tut lesbaren Schlüssel zu erstellen, einfach eine schöne Liste von Wörtern finden, die unverwechselbar sind, können sagen, Sie sind mit einer 128-Bit-UUID, eine Liste mit 256 Wörtern (2 ^ 8) bedeutet 16 Wörter.

Dumme Frage, aber warum Menschen lesen / schreiben UUID / etc. in Bezug auf Ihre Anwendung?

Wenn alles, was Sie wollen, ist ein Weg readably Hex-Werte zu kommunizieren (dh über das Telefon, oder wenn jemand anweist verbal, was zu geben), dann schlage ich vor Sie verwenden eine der verschiedenen Buchstabieralphabete, wie die NATO Phonetic Alphabet oder die US Army / Navy Phonetic Alphabet .

Im letzteren wird die Buchstaben A bis F werden als „in der Lage“, „Bäcker“ gesprochen, „Charlie“, „Hund“, „einfach“ und „Fuchs“ sind, so dass Sie die Hex-Sequenz „3fd2cc0e“ lesen würden als „drei Fuchs Hund zwei charlie charlie Null easy“. Ein UUID würde genau die gleiche Art und Weise in ausgelesen werden.

S / KEY verwendet ein Wörterbuch von 2048 Wörter 64-Bit-Zahlen zur Karte zu eine Folge von 6 vordefinierten Wörter / Silben. (Die Menschen werden immer finden Schimpfwörter, wenn sie für sie suchen;))

Bubble Babble und base32 ist ineffizient, vor allem in Ihrem Fall. Ich schlage vor, dass Sie Ihren eigenen Algorithmus zu machen. Da es 20 Konsonanten und Vokale 6 (einschließlich ‚y‘) sind, können Sie ca. haben. 20 * 6 * 2 + 6 · 6 = 276 Konsonant / Vokal-Vokal / Konsonanten-Paare. Also jedes Byte Ihrer Zahl kann durch ein Paar dargestellt werden. Mit etwas Ihres Algorithmus Tweaking aussprechbar Wörter viel kürzer als Blase Geschwätz produzieren könnte. Man könnte sogar Würfel spielen und alle ungeraden Ziffern mit einem Konsonanten / Vokal ersetzen. Zum Beispiel codiert 0123456789ABCDEF (hex) bis ABECIDOFUGYHKRM. 3141592654 (DEC) kodiert, um HHIA-ROIR. Sie sind mit zehn Ersatz Konsonanten links, die mit Vokalen gepaart werden können einige Doppelkonsonanten usw. zu ersetzen.

  
    

und hoffentlich ein bisschen Kompression

  

Nicht sicher genau das, was Sie es bedeuten; etwas „lesbar“ oder „pronouncable“ machen wird unweigerlich den Raum für die es erforderlich erweitern. Vielleicht meinte man „hoffentlich ein wenig Redundanz“? Es wäre gut, wenn, auch wenn der Benutzer einen kleinen Fehler macht, kann das System erkennen und vielleicht korrigiert selbst.

Wirklich hängt es sehr davon ab, wie groß Ihre UUIDs sind und wie sie am häufigsten kommuniziert werden. Wenn sie über Telefon oder VoIP zu kommunizieren müssen, wollen Sie mehr hörbare Redundanz. Wenn sie in mobile Geräte mit numerischen Tastaturen eingegeben werden müssen, kann es schwierig sein, alphabetische Zeichen einzugeben, um so mehr, wenn sie fallempfindlich sind. Wenn sie eine Menge niedergeschrieben sind, müssen Sie über Zeichen kümmern, die ähnlich aussehen (O und 0 und o, zum Beispiel). Wenn sie zu speichernden müssen, dann wahrscheinlich Strings realer Wörter sind die besten (haben einen Blick auf die PGP Wort Liste ).

Aber ich denke, eine große Allround-Lösung wird Numberic Ziffern nur verwenden. Sie sind viel härter miteinander zu verwechseln (sowohl bei Wort und Schrift) als einige Buchstaben. Einfach auf mobilen Geräten zu geben, und die Leute sind nicht so schlecht an Zahlen auswendig zu lernen.

Und die Länge der Saite ist auch nicht schlecht. Vergleichen wir base32 mit Basis 10 (dezimal). Die Länge eines Dezimalstring ist log_10(32)-fache der Länge der entsprechenden base32 String oder etwa 1,5 mal so lang. Zehn Zeichen von base32 entsprechen 15 Dezimalstellen.

Nicht viel von einer Strafe, IMO, wie es in der Basis 32 zu sehen, ist es einfach, C und T oder S, F und X (wenn gesprochen) zu verwechseln, und jemand mit einem fremden Akzente spricht eher Probleme verursachen.

Wenn sie einfach sie wahrscheinlich nicht lesen würden besonders einzigartig.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top