来自类属性的唯一,人类可读ID

时间:2013-03-05 15:39:11

标签: algorithm uniqueidentifier

我想从几个类属性中创建一个唯一的,可读的ID,例如:

Class A contains property c,d,e
Class B contains property f,g

所以一个ID代表

c=1
d=2
e=3
f=4
g=5

而另一个ID代表

c=7
d=3
e=4
f=0
g=11

为了论证,属性只是整数(编辑:在0到1000的范围内),而实际上它们实际上也可能是浮点数和字符串。

我正在寻找一种方法将这些值组合成一个简短的人类可读ID。另外,我希望能够从ID重建属性。此外,如果可能,属性的微小差异也会导致ID的差异很小。

这是一个我认为小而且可以考虑的例子。人类可读: H5RT33

是否有类似的算法?

编辑: 我写下了ID示例,同时期待一个类似“什么是人类可读的?”的问题。我发现难以描述 - 例如,MD5不会,而像“树”这样的真实单词则不是必需的。 因此,给出的ID有点在中间,但我并不是要将其限制为6个字符,或仅限大写字母和数字。

另外,我谈到了整数,而我真的是指“0-1000范围内的整数”。

1 个答案:

答案 0 :(得分:3)

你想要一个可逆变换(一个双射),这意味着原始和变换的信息内容是相同的。仅使用大写字母的六字符字母数字代码,如H5RT33中有36个 6 可能的值;换句话说,它有6 * log236 = 31.1个信息。另一方面,五(32位)整数包含5 * 32 = 180位,这是相当多的(当然,除非整数具有受限范围)。而且你说你也想编码浮点数和字符串,它们包含更多的信息。

因此,在严格的信息理论基础上,我认为您将很难满足您的所有要求。