我有一个关于Guid作为生成ID的方法的问题。我需要能够为给定类的每个实例生成一个新的唯一ID(我希望有几百个实例)。我在下面提供了我的代码:
class Program
{
static void Main(string[] args)
{
Instance instance1 = new Instance();
Console.WriteLine(instance1.ID);
Instance instance2 = new Instance();
Console.WriteLine(instance2.ID);
Console.ReadKey();
}
}
public static class GenerateID
{
public static string NewID()
{
Guid guid = Guid.NewGuid();
string id = guid.ToString();
return id;
}
}
public class Instance
{
public string ID = GenerateID.NewID();
}
从我所看到的,这个方法有效,每次运行代码时都会生成两个唯一的ID,但我无法对此进行广泛的测试,因为我读到Guid能够生成类似于badgilion的错误的ID。
我实施上述方法的方式是否确保每次时ID 都是唯一的?或者有碰撞的机会吗?如果是这样,那么为实例分配唯一ID的更好方法是什么?
编辑:好的,所以我从ppl的答案中了解到,Guid本身并不是100%独特的(谢谢,我一定要仔细阅读),但我的问题是方法是否是我的用于获取ID可能会增加生成相同的两个ID的机会?或者这是获取唯一ID的好方法吗?答案 0 :(得分:2)
one
,使用MSDN的话,“非常高度的确定性”,是唯一的。
.NET调用调用WIN32的Guid.NewGuid()
(调用CoCreateGuid()
),其评论如下:
MSDN:
在很高的确定性下,此函数返回一个唯一值 - 在同一个或任何其他系统上没有其他调用(联网与否),应该返回相同的值 - {{ 3}}
答案 1 :(得分:0)
您生成的每个GUID都包含32个十六进制数字的序列,由2 ^ 128个数字组成!因此获得重复GUID的机会几乎为零。考虑到由128位随机数组成的GUID,即使您同时生成它们,也可以将重复的GUID设置为零