【发布时间】:2011-01-10 09:58:10
【问题描述】:
我需要为我的应用程序生成唯一 ID,并且我正在寻找合适的算法。我更喜欢这样的东西--
YYYY + MM + DD + HH + MM + SS + <random salt> + <something derived from the preceding values>
F.ex. -
20100128184544ewbhk4h3b45fdg544
我正在考虑使用SHA-256 或其他东西,但结果字符串不应该太长。我可以使用UUID,但同样,它们太长了,而且只能在一台机器上保证它们是唯一的。
我欢迎提出建议和想法。我的编程语言是 Java。
编辑: id 不需要是加密安全的。我正在研究更简单的散列算法,例如 Dan Bernstein 的散列算法等。
【问题讨论】:
-
UUID 保证普遍是唯一的。它使用算法中的 MAC 地址来确保没有两台机器生成相同的 UUID。
-
GUID 有什么问题?它并不比您给出的示例长多少,并且 GUID 是唯一的
-
@Kenny:Afaik 没有人使用第一个版本(具有 MAC 地址的版本)了。无论如何,这有点离题,因为现在许多 NIC 都有用户可配置的 MAC 地址。我今天看到的大多数 UUID 都是第 4 版。
-
虽然算法试图确保 UUID / GUID 是唯一的,但它可能发生的数学百分比机会,但它在十亿分之一的范围内。 MAC 地址组件在算法的后续变体中被删除,以防止 GUID 被追溯到 Mac 地址 - 它造成了隐私问题。
-
严格来说,不可能生成 保证唯一 值,因为可以构造无限数量的对象(并且存储生成的 id 的空间有限) -您正在寻找具有足够熵以实际上唯一的东西,为此我会使用 UUID(如果我需要它作为文本表示形式更短一些,则使用 base64 对其进行编码)
标签: algorithm unique uniqueidentifier random