为什么 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 仍然是唯一的!