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

本文关键字:16个 仍然是 唯一 字符 可以使 Guid 的前 我可以 | 更新日期: 2023-09-27 18:03:02

目标

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

背景

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

问题

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

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

否。

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

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

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

例如,以下是一些Oracle生成的GUID

D71CDF38BB3B6026E0430A9A9A286026
D71CDF38BB3C6026E0430A9A9A286026
D71CDF38BB3D6026E0430A9A9A286026
D71CDF38BB3E6026E0430A9A9A286026
D71CDF38BB3F6026E0430A9A9A286026
D71CDF38BB406026E0430A9A9A286026