我可以使用Guid的前16个或后16个字符吗?它仍然是唯一的吗
本文关键字:16个 仍然是 唯一 字符 可以使 Guid 的前 我可以 | 更新日期: 2023-09-27 18:03:02
目标
生成一个16个字符的唯一密钥,用作批处理名称,该密钥不需要任何类型的存储(例如唯一计数器(。
背景
我有一个Windows服务,每30秒运行一次。我从MQ中提取消息,并对它们进行批处理。我正在进行的一个服务调用现在需要一个16个字符的批处理名称他们不在乎批次名称是什么,只需要在所有批次中都是唯一的。
问题
如果我生成一个Guid
,我是否可以使用该字符串的前16个或最后16个字符,并且它仍然是唯一的,以满足我的需求?
否。
Raymond Chen详细解释了为什么GUID是全局唯一的,但GUID的子字符串不是。
然而,如果你在一台机器上运行这个,那么你不需要你的ID是全局唯一的,只需要本地唯一。因此,您可以从他描述的GUID算法中删除MAC地址要求。此外,如果你知道每30秒只会生成一个,你可以放弃算法的碰撞部分。这几乎让你使用qujck建议的日期-时间。
答案很简单。为什么不使用日期/时间?
例如,以下是一些Oracle生成的GUID
D71CDF38BB3B6026E0430A9A9A286026
D71CDF38BB3C6026E0430A9A9A286026
D71CDF38BB3D6026E0430A9A9A286026
D71CDF38BB3E6026E0430A9A9A286026
D71CDF38BB3F6026E0430A9A9A286026
D71CDF38BB406026E0430A9A9A286026