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

标签 .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

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

这是一个屏幕截图:

enter image description here

如您所见,每个生成的 GUID 都有一个 4在完全相同的地方......有谁知道为什么?

最佳答案

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

这个字符代表 UUID 版本(在你的例子中是版本 4),它的四位不应该是随机的。

还有一个:

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

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

https://en.wikipedia.org/wiki/Universally_unique_identifier了解更多信息。

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

关于.net - 为什么 Guid.NewGuid 总是在完全相同的位置有一个 4?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61870511/

相关文章:

c# - 检测不受控制的点击

.net:如何在 C# 中执行带有可为空参数的存储过程?

java - 如何创建一个循环来生成随机数,直到它与我的用户输入匹配?

passwords - 生成重置密码 token 的最佳实践

c# - 作为通用结构的强类型 Guid

c# - MS Application Insights - 如何限制 Sql 依赖关系

c# - .Net 将 Windows 窗体导出为 PDF

c++ - GUID 比较器错误!

python - 创建一长串随机值,没有重复

c - 使用 dSFMT 进行随机 float (0,1)