C# GUID的唯一性在哪里

C# GUID的唯一性在哪里,c#,guid,C#,Guid,非常简单的问题 生成Microsoft GUID时,GUID的哪一部分被认为是唯一的?以这个guid为例: 19C73070-400A-11E2-B017-3D05D2B0F3CE 我知道在GUID中,它有60位指定为时间戳,48位指定为计算机标识符,14位唯一性,6位是固定的。我只是不知道这些是什么顺序 我可以使用上面GUID的哪一部分来获得唯一性?不必是不可复制的,但足以从中识别 谢谢。您不应该依赖GUID生成器的实现,因为它可能会更改。这里正确的做法是使用哈希算法生成GUID的8字节哈希

非常简单的问题

生成Microsoft GUID时,GUID的哪一部分被认为是唯一的?以这个guid为例:

19C73070-400A-11E2-B017-3D05D2B0F3CE
我知道在GUID中,它有60位指定为时间戳,48位指定为计算机标识符,14位唯一性,6位是固定的。我只是不知道这些是什么顺序

我可以使用上面GUID的哪一部分来获得唯一性?不必是不可复制的,但足以从中识别


谢谢。

您不应该依赖GUID生成器的实现,因为它可能会更改。这里正确的做法是使用哈希算法生成GUID的8字节哈希,并使用它。

您不应该依赖GUID生成器的实现,因为它可能会更改。这里正确的做法是使用哈希算法生成GUID的8字节哈希,并使用它。

所有128位都是唯一性所必需的,可能除了6个固定位之外。可以为不同的时间戳生成相同的随机部分,任何生成V1 GUID的人可能会得到与V4 GUID相同的版本,除了版本

使用整个GUID或什么都不使用,如果您需要更短的GUID,则可能有其他带有随机数生成器+应用程序标识符的选项


建议阅读:

所有128位都是唯一性所必需的,可能除了6个固定位之外。可以为不同的时间戳生成相同的随机部分,任何生成V1 GUID的人可能会得到与V4 GUID相同的版本,除了版本

使用整个GUID或什么都不使用,如果您需要更短的GUID,则可能有其他带有随机数生成器+应用程序标识符的选项


推荐阅读:

唯一性来自您或任何人使用公平guid生成算法再次获得相同guid的机会。guid算法基本上是一个随机数生成器,选择的数量是如此之多,以至于任何两个公平生成的guid生成都不太可能产生相同的数量

有2^128个唯一的GUID,因为GUID是128位的。如果只有64位(8字节),则只有2^64个选项。这是一个小得多的数字,如果您随机选择64位数字,那么您与另一个随机选择发生“碰撞”的可能性要大得多

如果你给了一些结构,比如说4字节的日期和时间一直到分钟(smalldatetime),那么你就有60位剩余的随机数来唯一地标识这一分钟的任何记录。如果您同意每分钟为第n条新记录重复一个ID的第(n-1)/2^60种可能性,那么您可以使用它。(你仍然会使用所有64位作为你的ID)否则,增加你的位

此外,请注意GUID不必真正地全局唯一才有用-它的用途的隐含信息也是其唯一性的一部分!如果您的数据库中有一条用于管理文件上载的记录,并且布拉格的程序员使用相同的guid来定义某个ActiveX插件-这绝对没有问题,因为没有时间让某些代码使用您的记录id来加载ActiveX,浏览器也不会在加载插件时意外加载您的记录!数字的上下文是数字本身的一个重要部分


但是,除非您必须在两个或多个不总是连接的系统(脱机或对等客户端,或多个服务器)之间生成新ID,否则请改用串行递增的long,由中央管理机构管理。

唯一性来自您或任何人使用公平guid生成算法再次获得相同guid的机会。guid算法基本上是一个随机数生成器,选择的数量是如此之多,以至于任何两个公平生成的guid生成都不太可能产生相同的数量

有2^128个唯一的GUID,因为GUID是128位的。如果只有64位(8字节),则只有2^64个选项。这是一个小得多的数字,如果您随机选择64位数字,那么您与另一个随机选择发生“碰撞”的可能性要大得多

如果你给了一些结构,比如说4字节的日期和时间一直到分钟(smalldatetime),那么你就有60位剩余的随机数来唯一地标识这一分钟的任何记录。如果您同意每分钟为第n条新记录重复一个ID的第(n-1)/2^60种可能性,那么您可以使用它。(你仍然会使用所有64位作为你的ID)否则,增加你的位

此外,请注意GUID不必真正地全局唯一才有用-它的用途的隐含信息也是其唯一性的一部分!如果您的数据库中有一条用于管理文件上载的记录,并且布拉格的程序员使用相同的guid来定义某个ActiveX插件-这绝对没有问题,因为没有时间让某些代码使用您的记录id来加载ActiveX,浏览器也不会在加载插件时意外加载您的记录!数字的上下文是数字本身的一个重要部分


但是,除非您必须在两个或多个不总是连接的系统(脱机或对等客户端,或多个服务器)之间生成新ID,否则请使用由中央管理机构管理的串行递增长度。

我认为该定义取决于生成GUID的内容。并不是所有的实现都是基于时间戳生成的。使用整个东西有什么不对?一个系统正在使用我们的数据,但只有8个字节来识别记录。对不起,请阅读维基百科文章,但这是您在尝试实现它之前需要知道的:为什么不能使用简单的计数器?请