Question

J'utilise des UUID, mais ils ne sont pas très agréables à lire, à écrire et à communiquer. Je voudrais donc les encoder. Je pourrais utiliser base64 ou base32, mais ce ne serait pas facile de toute façon: base64 contient des lettres et des symboles en majuscule. Base32 est un peu meilleur, mais vous pouvez toujours obtenir des trucs maladroits.

Je me demandais s'il existait un moyen agréable et propre de coder un nombre en phonèmes agréables, afin d'obtenir une meilleure lisibilité et, espérons-le, un peu de compression.

Était-ce utile?

La solution

Bubble Babble est tout indiqué. Il génère une sortie insensée mais lisible comme:

xesef-disof-gytuf-katof-movif-baxux

Autres conseils

J'espère que vous n'utiliserez pas cette idée: Le générateur de malédiction automatisé :)

Pourquoi ne pas utiliser quelque chose de similaire à ce que PGP fait pour créer des clés lisibles, il suffit de trouver une belle liste de mots distinctifs, disons que vous utilisez un UUID 128 bits, une liste de 256 mots (2 ^ 8) signifie 16 mots.

Question stupide mais pourquoi les gens lisent-ils / écrivent-ils dans UUID? par rapport à votre candidature?

Si tout ce que vous voulez, c'est un moyen de communiquer les valeurs hexadécimales de manière lisible (par exemple, par téléphone ou en demandant verbalement à quelqu'un ce qu'il doit taper), je vous suggère d'utiliser l'un des différents alphabets phonétiques, comme le Alphabet phonétique de l'OTAN ou Alphabet phonétique de l'armée américaine / de la marine .

Dans ce dernier cas, les lettres AF sont dites "en mesure", "boulanger", "charlie", "chien", "facile", "fox", respectivement, vous lirez la séquence hexagonale "3fd2cc0e" en tant que "trois chiens de renard deux charlie charlie zéro facile". Un uuid serait lu exactement de la même manière.

S / KEY utilise un dictionnaire de 2048 mots pour mapper des nombres de 64 bits à une séquence de 6 mots / syllabes prédéfinis . (Les gens trouveront toujours des gros mots s’ils les cherchent;))

Bubble babble et base32 sont inefficaces, surtout dans votre cas. Je vous suggère de créer votre propre algorithme. Puisqu'il y a 20 consonnes et 6 voyelles (y compris 'y'), vous pouvez avoir env. 20 * 6 * 2 + 6 * 6 = 276 paires consonne / voyelle / voyelle / consonne. Ainsi, chaque octet de votre numéro peut être représenté par une paire. Avec un peu de peaufinage, votre algorithme pourrait produire des mots prononcés beaucoup plus courts que le babillage de bulles. Vous pouvez même jouer aux dés et remplacer tous les chiffres impairs par une consonne / voyelle. Par exemple, 0123456789ABCDEF (hex) code pour ABECIDOFUGYHKRM. 3141592654 (dec) code pour HHIA-ROIR. Il vous reste dix consonnes de rechange qui peuvent être associées à des voyelles pour remplacer des consonnes doubles, etc.

  
    

et j'espère un peu de compression

  

Vous ne savez pas exactement ce que vous entendez par là; faire quelque chose " lisible " ou " pronouncable " va inévitablement élargir l'espace requis pour cela. Peut-être avez-vous voulu dire "espérons un peu de redondance"? Ce serait bien si, même si l'utilisateur commettait une petite erreur, le système pourrait le détecter et peut-être même le corriger.

En réalité, cela dépend beaucoup de la taille de vos UUID et de la manière dont ils sont le plus souvent communiqués. S'ils doivent être communiqués par téléphone ou VoIP, vous souhaitez davantage de redondance audible. S'ils doivent être entrés dans des appareils mobiles dotés de pavés numériques, il est généralement difficile de saisir des caractères alphabétiques, voire davantage s'ils sont sensibles à la casse. S'ils sont très écrits, vous devez vous préoccuper des caractères qui se ressemblent (par exemple, O et 0 et o). S'ils doivent être mémorisés, les chaînes de vrais mots sont probablement les meilleures (consultez le PGP Word Liste ).

Cependant, je pense qu'une bonne solution globale consiste simplement à utiliser des chiffres. Ils sont beaucoup plus difficiles à confondre (à l'oral et à l'écrit) que certains caractères alphabétiques. Facile à saisir sur les appareils mobiles et les utilisateurs ne sont pas trop mal placés pour mémoriser des numéros.

Et la longueur de la chaîne n'est pas trop mauvaise non plus. Comparons base32 à base 10 (décimal). La longueur d'une chaîne décimale est log_10 (32) fois la longueur de la chaîne base32 correspondante, soit environ 1,5 fois plus. Dix caractères de base32 correspondent à 15 chiffres décimaux.

Ce n’est pas vraiment une pénalité, IMO, vu qu’en base 32, il est facile de confondre C et T, ou S, F et X (quand on le parle), et qu’une personne qui parle avec un accent étranger a plus de chance de causer des ennuis.

S'ils étaient faciles à lire, ils ne seraient probablement pas particulièrement uniques.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top