为什么 Guid.NewGuid 总是在完全相同的位置出现 4?
Why does Guid.NewGuid always have a 4 in the exact same spot?
我创建了一个刚刚生成随机 GUID 的控制台应用程序,但我注意到它一直在同一位置有一个 4
...这是为什么?
这是我的代码:
Sub Main()
Dim generatedGuids = New List(Of String)
Dim duplicateGenerated As Boolean = False
Dim index As ULong = 0
While Not duplicateGenerated
Dim generatedGuid As String = Guid.NewGuid.ToString
generatedGuids.Add(generatedGuid)
duplicateGenerated = generatedGuids.Count <> generatedGuids.Distinct.Count
index += 1
Console.WriteLine(index & " - " & generatedGuid)
End While
Console.WriteLine("FOUND A DUPLICATE")
End Sub
(它在 VB.Net 因为我刚刚参加了一些在线课程,并且正在玩它。)
截图如下:
如您所见,每个生成的 GUID 在完全相同的位置都有一个 4
...有人知道为什么吗?
并非 GUID 的所有 128 位都是随机的。
这个字符代表 UUID 版本(在你的例子中是版本 4),它的四位不应该是随机的。
还有一个:
下一个连字符后的第一个字符也不是完全随机的,它的一些位是确定的,实际上是编码 UUID 版本的变体。
请注意,在您的 运行 中,最后一个字符的所有值都大于或等于 8
,并且小于 c
,这意味着十六进制值始终第 10 位:10xx
,这意味着您使用的是 UUID 版本 4,变体 1。
有关详细信息,请参阅 https://en.wikipedia.org/wiki/Universally_unique_identifier。
而且...这就是确定位的全部内容,所以不用担心,您的 GUID 仍然是唯一的!
我创建了一个刚刚生成随机 GUID 的控制台应用程序,但我注意到它一直在同一位置有一个 4
...这是为什么?
这是我的代码:
Sub Main()
Dim generatedGuids = New List(Of String)
Dim duplicateGenerated As Boolean = False
Dim index As ULong = 0
While Not duplicateGenerated
Dim generatedGuid As String = Guid.NewGuid.ToString
generatedGuids.Add(generatedGuid)
duplicateGenerated = generatedGuids.Count <> generatedGuids.Distinct.Count
index += 1
Console.WriteLine(index & " - " & generatedGuid)
End While
Console.WriteLine("FOUND A DUPLICATE")
End Sub
(它在 VB.Net 因为我刚刚参加了一些在线课程,并且正在玩它。)
截图如下:
如您所见,每个生成的 GUID 在完全相同的位置都有一个 4
...有人知道为什么吗?
并非 GUID 的所有 128 位都是随机的。
这个字符代表 UUID 版本(在你的例子中是版本 4),它的四位不应该是随机的。
还有一个:
下一个连字符后的第一个字符也不是完全随机的,它的一些位是确定的,实际上是编码 UUID 版本的变体。
请注意,在您的 运行 中,最后一个字符的所有值都大于或等于 8
,并且小于 c
,这意味着十六进制值始终第 10 位:10xx
,这意味着您使用的是 UUID 版本 4,变体 1。
有关详细信息,请参阅 https://en.wikipedia.org/wiki/Universally_unique_identifier。
而且...这就是确定位的全部内容,所以不用担心,您的 GUID 仍然是唯一的!