And*_*are 25
格雷格·迪恩的回答是正确的,但为了理解如何生成GUID以及为什么不应该缩短它,我强烈建议你阅读下面的文章.
旧的新事物:GUID是全局唯一的,但GUID的子字符串不是:
客户需要生成一个8字节的唯一值,他们最初的想法是生成一个GUID并丢弃后半部分,保留前八个字节.他们想知道这是不是一个好主意.
不,这不是一个好主意.
GUID生成算法依赖于它具有用于建立唯一性的所有16个字节的事实,并且如果丢弃其中一半,则会丢失唯一性.
Wil*_*ung 12
根据您的应用程序,它实际上取决于您的"G"(全局)在您的应用程序中的大小.
"GUID",全球唯一ID.典型的现代"通用"GUID是为任何应用程序设计的,而它们的"G",它们的"全局",实际上就是这样.全球.全世界.跨应用程序,国家,地理,一切.16个字节是很多信息.
现在,如果在你的应用中,你的"G"不是那么大,如果你没有期望,或者"G"的意图在世界意义上是全球性的,而不是简单地在应用空间意义上的"全球",那么你可以轻松地将尺寸缩小到您的应用范围.
贵公司有四个部门,永远不会有更多?2位 - 0,1,2,3对于此任务来说是足够大的"GUID".显然,这是一个人为的应用程序.
我们在过去了解了当我们解决Y2K问题时"限制比特"的后果.所以,"比特很便宜"是一个有效的理由,不能限制你的GUID大小,并且在"现在太多比特"方面犯了错误.但是,事实上,许多应用程序只是受限制,许多应用程序可能会生成大量数据,或者带宽受限于不需要16字节GUID的地方,并且使用一个应用程序会影响性能和资源.
因此,了解GUID的概念,以及它如何应用于您的应用程序.然后你可以做任何必要的尺寸.
较短的"据称全球唯一"ID,当其中许多或多或少随机生成时发生碰撞的可能性越高 - 并且,由于"生日悖论",这种机会可能高于您的想象"...见http://betterexplained.com/articles/understanding-the-birthday-paradox/.作为(非常近似但有用)的经验法则,如果(在N个可能的UID中)您指定sqrt(N)左右,则机会是不可忽略的.因此,128位ID对于意外碰撞是非常安全的,即使对于数十亿的ID也是如此; 但是如果你把它缩短到比如32位,即使只有几万个ID,你也会有很大的冲突风险.
它们正好是 16 字节。
从技术上讲,缩短它们的效果会根据生成它们的算法而有所不同。考虑到,您使用的 API(可能)不能保证特定的版本或实现,缩短它们不是一个好主意。即使这样做了,这也是一个坏主意。如果您需要少于 16 个字节的熵,您可能不应该使用 GUID。
欲了解更多信息: http://en.wikipedia.org/wiki/Globally_Unique_Identifier