2

客观的

生成一个唯一的 16 字符密钥,用作批次名称,不需要任何类型的存储(例如唯一计数器)。

背景

我有一个每 30 秒运行一次的 Windows 服务。我从 MQ 中提取消息并批量处理它们。我正在进行的服务调用之一是现在需要一个 16 个字符的批次名称。他们不在乎批次名称是什么,它只需要在所有批次中都是唯一的。

问题

如果我生成一个Guid,我可以使用该字符串的前 16 个字符还是后 16 个字符,并且它仍然是唯一满足我的需要的?

4

2 回答 2

6

不。

Raymond Chen 详细解释了为什么GUID 是全局唯一的,但 GUID 的子字符串不是

但是,如果您在一台机器上运行它,那么您不需要您的 ID 是全局唯一的 - 只需在本地唯一。因此,您可以从他描述的 GUID 算法中删除 MAC 地址要求。另外,如果你知道每 30 秒只会生成一个,你可以放弃算法的碰撞部分。这几乎让您使用 qujck 建议的日期时间。

于 2013-03-08T11:59:49.753 回答
3

不,是简单的答案。为什么不使用日期/时间?

例如,这里有一些 Oracle 生成的 GUID

D71CDF38BB3B6026E0430A9A9A286026
D71CDF38BB3C6026E0430A9A9A286026
D71CDF38BB3D6026E0430A9A9A286026
D71CDF38BB3E6026E0430A9A9A286026
D71CDF38BB3F6026E0430A9A9A286026
D71CDF38BB406026E0430A9A9A286026
于 2013-03-08T11:59:29.800 回答