Domanda

Sto usando gli UUID, ma non sono particolarmente belli da leggere, scrivere e comunicare. Quindi vorrei codificarli. Potrei usare base64 o base32, ma non sarebbero comunque facili: base64 ha lettere maiuscole e simboli. Base32 è un po 'meglio, ma è ancora possibile ottenere roba maldestra.

Mi chiedevo se esiste un modo semplice e pulito per codificare un numero in fonemi appetibili, in modo da ottenere una migliore leggibilità e, si spera, un po 'di compressione.

È stato utile?

Soluzione

Bubble Babble è una buona opzione da provare. Genera output senza senso ma leggibili come:

xesef-disof-gytuf-katof-movif-baxux

Altri suggerimenti

Spero che tu non usi questa idea: The Automated Curse Generator :)

Perché non usare qualcosa di simile a quello che fa PGP per creare chiavi leggibili, basta trovare un bel elenco di parole che sono distintive, diciamo che stai usando UUID a 128 bit, un elenco di 256 parole (2 ^ 8) significa 16 parole.

Stupida domanda, ma perché le persone leggono / scrivono gli UUID / ecc. rispetto alla tua domanda?

Se tutto ciò che desideri è un modo per comunicare in modo leggibile valori esadecimali (ad esempio, al telefono o quando istruisci verbalmente qualcuno su cosa digitare), allora ti suggerisco di utilizzare uno dei vari alfabeti fonetici, come alfabeto fonetico della NATO o US Army / Navy Phonetic Alphabet .

In quest'ultimo caso, le lettere AF sono pronunciate come "capaci", "panettiere", "charlie", "cane", "facile" e "volpe", rispettivamente, in modo da leggere la sequenza esadecimale "3fd2cc0e" come "tre cane volpe due charlie charlie zero facile". Un uuido verrebbe letto esattamente allo stesso modo.

S / KEY utilizza un dizionario di 2048 parole per mappare i numeri a 64 bit una sequenza di 6 predefiniti parole / sillabe. (Le persone troveranno sempre parolacce se le stanno cercando;))

Bubble babble e base32 sono inefficienti, specialmente nel tuo caso. Ti suggerisco di creare il tuo algoritmo. Poiché ci sono 20 consonanti e 6 vocali (inclusa "y") puoi avere circa. 20 * 6 * 2 + 6 * 6 = 276 coppie consonanti / vocali-vocali / consonanti. Quindi ogni byte del tuo numero può essere rappresentato da una coppia. Con un po 'di modifiche il tuo algoritmo potrebbe produrre parole pronunciabili molto più brevi delle bolle di bolle. Puoi persino giocare a dadi e sostituire tutte le cifre dispari con una consonante / vocale. Ad esempio, 0123456789ABCDEF (hex) codifica in ABECIDOFUGYHKRM. 3141592654 (dec) codifica in HHIA-ROIR. Ti rimangono dieci consonanti di riserva che possono essere accoppiate con vocali per sostituire alcune doppie consonanti ecc.

  
    

e si spera un po 'di compressione

  

Non so esattamente cosa intendi lì; rendere qualcosa "leggibile" o "pronunciabile" inevitabilmente espanderà lo spazio necessario per esso. Forse intendevi "speriamo un po 'di ridondanza"? Sarebbe positivo se, anche se l'utente commettesse un piccolo errore, il sistema è in grado di rilevarlo e forse anche di correggerlo.

In realtà dipende molto da quanto sono grandi i tuoi UUID e come vengono spesso comunicati. Se devono essere comunicati tramite telefono o VoIP, si desidera una ridondanza più udibile. Se devono essere inseriti in dispositivi mobili con tastiere numeriche, è difficile inserire caratteri alfabetici, soprattutto se fanno distinzione tra maiuscole e minuscole. Se sono scritti molto, devi preoccuparti per i personaggi che sembrano simili (O e 0 e o, per esempio). Se devono essere memorizzati, probabilmente le stringhe di parole reali sono le migliori (dai un'occhiata alla PGP Word lista ).

Comunque penso che un'ottima soluzione a tutto tondo stia usando solo cifre numeriche. Sono molto più difficili da confondere tra loro (sia quando pronunciati che scritti) rispetto ad alcuni caratteri alfabetici. Facile da inserire sui dispositivi mobili e le persone non sono così male a memorizzare i numeri.

E la lunghezza della stringa non è neanche male. Confrontiamo base32 con base 10 (decimale). La lunghezza di una stringa decimale è log_10 (32) volte la lunghezza della stringa base32 corrispondente, o circa 1,5 volte più a lungo. Dieci caratteri di base32 corrispondono a 15 cifre decimali.

Non molto di rigore, IMO, visto che nella base 32 è facile confondere C e T, o S, F e X (quando si parla), e qualcuno che parla con un accento straniero ha maggiori probabilità di causare problemi.

Se fossero facili da leggere, probabilmente non sarebbero particolarmente unici.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top