关于GUID的问题:它们总是固定长度,中间数字总是4吗?

我刚刚生成了几百万个GUID,把它们变成了一个字符串并得到了长度……它总是一样的。 转换为String时,我可以依赖GUID的这个固定长度吗?

此外,GUID的中间数字是否总是“4”,如此截图所示?

替代文字

是的,长度是固定的,是的,当您使用标准的tostring格式时,中间的数字总是4。 GUID中的一些位(几乎在任何非Windows窗口中称为UUID)都是固定的,以指示版本等等。

http://en.wikipedia.org/wiki/Uuid

编辑我应该补充一点,“4”仅适用于根据.NET中实现的Guid.NewGuid算法生成的Guids。 没有什么可以阻止你采取任意字节[16]并将其转换为Guid。 因此,对于.Net中当前的算法实现,您只能将其存储为4。 如果您从其他来源获取Guids,则无法在4.Net上更新。或者可能是windows(取决于.Net使用自己的或Windows的生成器)可能会更改GUID的固定数量

例如,以下是完全正常工作的代码,并且不会有4个位置:

var rand = new Random(); var byteArray = new byte[16]; rand.NextBytes(byteArray); var g = new Guid(byteArray); 

从Guid.ToString上的文档 (没有参数):

此Guid的值,格式如下:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx其中GUID的值表示为一系列小写的hex数字,分别为8,4,4,4和12位数字并分开用连字符。 返回值的示例是“382c74c3-721d-4f34-80e5-57657b6cbc27”。

所以答案是“是”,它总是相同的长度。

至于4,它是版本号(根据http://en.wikipedia.org/wiki/Uuid )。 使用该算法生成的每个GUID在该位置都将具有4,但较旧的GUID将具有1,2或3.未来的GUID可能具有5或更高的值。

否 – GUID不一定是类型4 UUID实际上Windows下的许多GUID都是类型1的UUID。

类型1采用主MAC,时钟和序列。 这实际上是“泄漏”数据,因为在同一系统上创建的所有UUID1将具有相同的MAC。 这就是为什么大多数GUID函数将获取此数据并对其进行散列并将其转换为基于散列的UUID的原因