我可以使用Guid的前16个字符,它仍然是唯一的吗?

时间:2013-03-08 11:57:53

标签: c# .net windows-services

目的

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

背景

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

问题

如果我生成Guid,我可以使用该字符串的第一个或最后16个字符,但它仍然是我需要的唯一字符吗?

2 个答案:

答案 0 :(得分:6)

没有

Raymond Chen在GUIDs are globally unique, but substrings of GUIDs aren't中详细解释了原因。

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

答案 1 :(得分:3)

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

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

D71CDF38BB3B6026E0430A9A9A286026
D71CDF38BB3C6026E0430A9A9A286026
D71CDF38BB3D6026E0430A9A9A286026
D71CDF38BB3E6026E0430A9A9A286026
D71CDF38BB3F6026E0430A9A9A286026
D71CDF38BB406026E0430A9A9A286026