我创建了一个只生成随机 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),并且正在玩弄它。)
这是一个屏幕截图:
如您所见,每个生成的 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/