我正在使用UUID,但它们并不是特别适合阅读,编写和交流。所以我想对它们进行编码。我可以使用base64或base32,但无论如何它们都不容易:base64有大写字母和符号。 Base32稍微好一点,但你仍然可以获得笨拙的东西。
我想知道是否有一种漂亮而干净的方式将数字编码成可口的音素,因此要获得更好的可读性并希望有点压缩。
答案 0 :(得分:12)
我希望你不要使用这个想法:The Automated Curse Generator :)
答案 1 :(得分:6)
Bubble Babble是一个很好的尝试。它生成无意义但可读的输出,如:
xesef-disof-gytuf-katof-movif-baxux
答案 2 :(得分:3)
为什么不使用与PGP相似的东西来创建可读键,只需找到一个很好的单词列表,让我们说你使用的是128位UUID,一个256字的列表(2 ^ 8)意味着16词语的
愚蠢的问题,但为什么人们在读/写UUID的/等等。关于你的申请?
答案 3 :(得分:3)
如果您想要的是一种可以自由地传达十六进制值的方式(即通过电话,或者在口头指示某人输入的内容),那么我建议您使用各种语音字母之一,例如{{3 }或NATO Phonetic Alphabet。
在后者中,字母AF分别被称为“有能力”,“面包师”,“查理”,“狗”,“易”和“狐狸”,因此您将读取十六进制序列“3fd2cc0e”作为“三只狐狸狗两只查理查理零容易”。将以完全相同的方式读出一个uuid。
答案 4 :(得分:1)
S/KEY使用2048个字的字典将64位数字映射到6个predefined个单词/音节的序列。 (如果他们正在寻找他们,他们总会找到发誓的话;)
答案 5 :(得分:1)
bubble babble和base32效率低下,特别是在你的情况下。我建议你制作自己的算法。由于有20个辅音和6个元音(包括'y'),你可以有约。 20 * 6 * 2 + 6 * 6 = 276辅音/元音 - 元音/辅音对。因此,您的号码的每个字节都可以用一对来表示。通过一些调整,您的算法可以产生比泡泡嘟嘟声短得多的可发音词。你甚至可以玩骰子并用辅音/元音替换所有奇数。例如,0123456789ABCDEF(hex)编码为ABECIDOFUGYHKRM。 3141592654(十二月)编码为HHIA-ROIR。你剩下十个备用辅音,可以与元音配对,取代一些双辅音等。
答案 6 :(得分:1)
这个问题很老了;有趣的是,它与我将要介绍的解决方案一样古老,但这里尚未提及。
它是Proquint。与气泡泡泡类似,但我认为差异使结果更易于阅读。
这是它的工作原理,来自their documentation:
总而言之,我们建议如下编码16位字符串作为交替的辅音和元音的原音[PRO-nouncable QUINT-uplet]。
四位作为辅音:
0 1 2 3 4 5 6 7 8 9 A B C D E F b d f g h j k l m n p r s t v z
两位元音:
0 1 2 3 a i o u
整个16位单词,其中“ con” =辅音,“ vo” =元音:
0 1 2 3 4 5 6 7 8 9 A B C D E F +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |con |vo |con |vo |con | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
使用破折号分隔各个标语,这些标语可以不读或发音为“ eh”。建议 标语序列的可选魔术数字前缀为“ 0q-”。
这里有一些IP点分四进制和它们相应的提示。
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
答案 7 :(得分:0)
希望有点压缩
不确定你的意思;制作“可读”或“可发音”的东西将不可避免地扩大其所需的空间。也许你的意思是“希望有点冗余”?如果即使用户犯了一个小错误,系统也可以检测甚至纠正它,这将是很好的。
实际上,这在很大程度上取决于您的UUID有多大以及它们最常传达的方式。如果需要通过电话或VoIP进行通信,则需要更多的可听冗余。如果需要使用数字键盘输入移动设备,则输入字母字符往往很困难,如果它们区分大小写,则更是如此。如果将它们写下来很多,则需要担心看起来相似的字符(例如,O和0和o)。如果他们需要被记忆,那么可能真正的单词串是最好的(看看PGP Word List)。
但是我认为一个很好的全面解决方案就是使用数字。与某些字母字符相比,它们(在口头和书面时)相互混淆起来要困难得多。很容易进入移动设备,人们记忆数字并不算太糟糕。
字符串的长度也不算太差。让我们将base32与基数10(十进制)进行比较。十进制字符串的长度是相应base32字符串长度的log_10(32)
倍,或大约1.5倍。 base32的十个字符对应15个十进制数字。
没有太大的惩罚,IMO,如同在32号基地那样容易混淆C和T,或S,F和X(说话时),而且说外国口音的人更有可能造成麻烦。 / p>
答案 8 :(得分:-3)
如果它们易于阅读,它们可能不会特别独特。