是否存在可检测的编码?

时间:2009-10-30 05:50:44

标签: encoding readable phoneme

我正在使用UUID,但它们并不是特别适合阅读,编写和交流。所以我想对它们进行编码。我可以使用base64或base32,但无论如何它们都不容易:base64有大写字母和符号。 Base32稍微好一点,但你仍然可以获得笨拙的东西。

我想知道是否有一种漂亮而干净的方式将数字编码成可口的音素,因此要获得更好的可读性并希望有点压缩。

9 个答案:

答案 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)

如果它们易于阅读,它们可能不会特别独特。