为什么 Guid.NewGuid 总是在完全相同的位置有一个 4?

Mas*_*son 7 .net random 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
Run Code Online (Sandbox Code Playgroud)

(它在 VB.Net 中,因为我刚刚参加了一些在线课程,并且正在玩弄它。)

这是一个屏幕截图:

在此处输入图片说明

如您所见,每个生成的 GUID4在完全相同的位置都有一个...有谁知道为什么?

Pac*_*ac0 7

GUID 的所有 128 位并非都是随机的。

该字符代表 UUID 版本(在您的例子中为版本 4),并且它的四位不应是随机的。

还有另一种:

下一个连字符之后的下一个第一个字符也不是完全随机的,它的一些位是确定的,并且实际上正在编码UUID 版本的变体。

请注意,在您的运行中,最后一个字符的所有值都大于或等于8,小于c意味着十六进制值的第一位始终为 10 : 10xx,这意味着您正在使用 UUID 版本 4,变体 1。

有关更多信息,请参阅https://en.wikipedia.org/wiki/Universally_unique_identifier 。

而且...这就是确定位的全部内容,所以不用担心,您的 GUID 仍然是唯一的!