J'utilise des uuids, mais ils ne sont pas particulièrement agréables à lire, écrire et communiquer. Je voudrais donc les coder. Je pourrais utiliser la base64 ou la base32, mais ils ne seraient pas faciles de toute façon: base64 a des lettres et des symboles capitalisés. Base32 est un peu mieux, mais vous pouvez toujours obtenir des trucs maladroits. P>
Je me demandais s'il y a un moyen agréable et propre d'encoder un nombre en phonèmes agréables, afin d'obtenir une meilleure lisibilité et, espérons-le, un peu de compression. P>
9 Réponses :
S'ils étaient faciles à lire, ils ne seraient probablement pas particulièrement uniques. P>
Ce n'est pas vrai. Un UUID n'est qu'un grand nombre. C'est comme ça que vous l'encodez cela fait la différence.
Cela semble être une déclaration raisonnable: l'ensemble d'objets prononçables est B> probablement moins que l'ensemble des nombres uniques.
Si vous savez que ce n'est pas vrai, alors pourquoi n'avez-vous pas résolu votre propre problème?
L'ensemble de caractères de 0 à F est probablement inférieur à celui des nombres uniques. Vous voyez toujours Uuid codé dans Hex et je peux vous garantir qu'ils sont très uniques.
J'espère que vous n'utilisez pas cette idée: Le générateur de malédiction automatisé a> :) p>
C'est fantastique. Je ne peux pas vraiment dire que vous avez résolu ma question, mais vous avez définitivement fourni un point de vue intéressant. +1
Pourquoi ne pas utiliser quelque chose de similaire à ce que PGP doit créer des clés lisibles, trouvez simplement une belle liste de mots distinctifs, disons que vous utilisez 128 bits Uuid's, une liste de 256 mots (2 ^ 8) signifie 16 mots. p>
question stupide, mais pourquoi les gens sont-ils en train de lire / écrire UUID / etc. En ce qui concerne votre application? p>
J'ai besoin de générer des identifiants uniques, car je vais jouer à l'avenir. Cependant, les objets que j'ai créés sont identifiés par URI ce qui contient l'UUID. Bien sûr, je peux attribuer des noms plus significatifs, mais je ne peux pas m'attendre à chaque objet que je crée pour avoir un nom significatif. Pourtant, j'aimerais avoir quelque chose qui peut être épelé.
Votre idée est intéressante. Je pense que l'utilisation de mots entiers est un peu trop exclusive, mais je l'aime. À la recherche de quelque chose de plus court.
Ensuite, j'irais simplement avec un codage hexagonal, 0-9, A-F, la plupart des gens peuvent lire / prononcer ceux sans trop de problèmes.
Bubble Babble est un bon à essayer. Il génère une sortie absolument mais lisible comme:
et, espérons-le, un peu de compression p> blockQuote> blockQuote>
Je ne sais pas exactement ce que vous voulez dire là; Faire quelque chose de "lisible" ou "prononcable" élargira inévitablement l'espace requis pour cela. Peut-être que vous vouliez dire "espérons-le un peu de redondance"? Ce serait bien si, même si l'utilisateur fait une petite erreur, le système peut détecter et peut-être même le corriger. P>
Vraiment, cela dépend beaucoup de la taille de vos uuids et de la façon dont ils sont le plus souvent communiqués. S'ils doivent être communiqués sur le téléphone ou la VoIP, vous voulez plus de redondance audible. S'ils doivent être entrés dans des appareils mobiles avec des claviers numériques, il a tendance à être difficile d'entrer des caractères alphabétiques, de Moreso s'ils sont sensibles à la casse. S'ils sont écrits beaucoup, vous devez vous inquiéter des personnages similaires (O et 0 et O, par exemple). S'ils doivent être mémorisés, les cordes de vrais mots sont probablement les meilleures (consultez le PGP Word Liste ). P>
Cependant, je pense qu'une grande solution tout autour utilise simplement des chiffres numériques. Ils sont beaucoup plus difficiles à confondre les uns avec les autres (à la fois par parlé et écrit) que certains caractères alphabétiques. Facile à entrer sur les appareils mobiles et les gens ne sont pas trop mauvais lors de la mémorisation des chiffres. P>
Et la longueur de la chaîne n'est pas trop mauvaise non plus. Comparons la base32 avec la base 10 (décimale). La longueur d'une chaîne décimale est
log_10 (32) code> fois la longueur de la chaîne de base32 correspondante, ou environ 1,5 fois plus longue. Dix caractères de base32 correspondent à 15 chiffres décimaux. P>
Pas une grande partie d'une pénalité, imo, voir comme dans la base 32 Il est facile de confondre C et T, ou S, F et X (quand parlé), et une personne qui parle avec un accent étranger est plus susceptible de causer des problèmes. < / p>
Ce que je veux dire, c'est que, par exemple, la séquence de 00 à FF est dans la base 16. Si vous acceptez des jetons comme "wa" ou "su" ou "moi", vous avez plus de flexibilité et, par conséquent, il faut moins d'espace. Par exemple, un UUID codé dans la base64 ne prend que 22 caractères et 26 à base32.
Donc, vous recherchez un rendement raisonnablement spatial ou efficace (pas nécessairement pour un ordinateur, peut-être pour une personne) des moyens de représenter des uuides. J'ai révisé ma réponse pour discuter davantage pourquoi je pense que je pense que KISS (et utiliser décimal) est souvent le meilleur moyen d'y aller.
Si vous utilisez de longues chaînes de chiffres, veuillez mettre un tiret sur 4 caractères afin que les gens puissent utiliser leur mémoire courte bien entraînée (numéro de carte de crédit, numéro de téléphone) pour lire des chiffres en groupe de 4.
S / Key utilise un dictionnaire de 2048 mots pour mapper 64 bits numéros à Une séquence de 6 Prédéfinie mots / syllabes. (Les gens trouveront toujours des mots de jurons s'ils les recherchent;)) p>
Si tout ce que vous voulez, c'est un moyen de communiquer des valeurs hexagonales de manière laguée (c'est-à-dire sur le téléphone, ou lorsque vous instructions à quelqu'un de type verbalement à taper), je vous suggère d'utiliser l'un des différents alphabets phonétiques, tels que le alphabet phonétique de l'OTAN ou le Alphabet phonétique de l'armée américaine / marine . p>
Dans ce dernier, les lettres AF sont prononcées comme "capable", "Baker", "Charlie", "Chien", "Facile" et "Fox", respectivement, alors vous lisiez la séquence hexagonale "3fd2cc0e" comme "trois renards chien deux charlie charlie zéro facile". Un UUID serait lu exactement de la même manière. P>
Babble bulle et base32 sont inefficaces, surtout dans votre cas. Je suggère que vous fabriquiez votre propre algorithme. Comme il y a 20 consonnes et 6 voyelles (y compris 'y'), vous pouvez avoir env. 20 * 6 * 2 + 6 * 6 = 276 Consontant / Voyeuse-Voyeuse / Consonanantes. Donc, chaque octet de votre numéro peut être représenté par une paire. Avec un peu de peaufiner votre algorithme pourrait produire des mots prononcables beaucoup plus courts que Babble Babble. Vous pouvez même jouer à des dés et remplacer tous les chiffres impairs avec une consonne / voyelle. Par exemple, 0123456789ABCDEF (HEX) codes à Abecidofugyhkrm. 3141592654 (DEC) CODEES À HHIA-ROIR. Vous êtes laissé avec dix consonnes de rechange qui peuvent être jumelées avec des voyelles pour remplacer des doubles consonnes etc. P>
Cette question est très ancienne; Fait intéressant, aussi vieux que la solution que je suis sur le point de présenter, mais cela n'a pas encore été mentionné ici.
C'est Voici comment ça fonctionne, de Leur documentation : P> En résumé, nous proposons un codage d'une chaîne de 16 bits en tant que Proquint [quint-à-porte pro-nouncable] d'alternance de consonnes et de voyelles comme suit. P>
quatre bits comme une consonne: p>
127.0.0.1 lusab-babad
63.84.220.193 gutih-tugad
63.118.7.35 gutuk-bisog
140.98.193.141 mudof-sakat
64.255.6.200 haguz-biram
128.30.52.45 mabiv-gibot
147.67.119.2 natag-lisaf
212.58.253.68 tibup-zujah
216.35.68.215 tobog-higil
216.68.232.21 todah-vobij
198.81.129.136 sinid-makam
12.110.110.204 budov-kuras
Vous cherchez un moyen de faire des uuids mémorables (comme dans les mots de passe prononçables) ou simplement d'un moyen efficace de les lire à quelqu'un par téléphone?
Lisez-les par téléphone et en parlez facilement. Je pourrais également mettre en œuvre une stratégie de recherche (comme des raccourcisseurs d'URL), mais avant de le faire, je veux apprendre un peu plus sur le sujet.