假设我想设置一个guid作为我的应用程序的程序集guid。从互联网上搜索,我们可以使用 (new Guid()).Next()
获得一个新的独特价值。
我无法弄清楚我的guid如何保证与他人不同?如果您知道如何,请解释。
假设我想设置一个guid作为我的应用程序的程序集guid。从互联网上搜索,我们可以使用 (new Guid()).Next()
获得一个新的独特价值。
我无法弄清楚我的guid如何保证与他人不同?如果您知道如何,请解释。
它不是,但是它的生成方式和它的表示方式使得在这个里程中生成两个相同GUID的概率几乎为零。
看到: 简单证明GUID不是唯一的
您唯一的保证就是概率就在您身边。 2 ^ 128个可能的GUID和创建过程中的一些聪明使得你不太可能看到重复。
它似乎 V4 是Windows上的标准GUID。如果那个纯粹基于伪随机数生成器,正如维基百科似乎表明的那样,它受到了影响 生日问题。
我已经看到几个使用128位的例子来表明复制几乎是不可能的。那些经常会错过两件事。生日问题和V4 GUID实际上是124位。
你需要 1/2+sqrt(1/4-2*2^124*ln(0,5)) ≈ 5.4*10^18
GUID可以达到50%的重复几率。这仍然很多,但50%可能不是你正在寻找的交易。假设你希望它是一百万分之一来获得重复,那么你可以拥有它 sqrt(2*2^124*ln(1/(1-0,000001)))
≈6,5* 10 ^ 15 GUID。如果你每秒创建一千个GUID,你可以继续这样做近206667年,然后再达到百万到百万的风险。 6,52191054316287e15/(3600*24*365,25*1000) ≈ 206666,874006986
我得到所有这些计算的机会正确→0。
从 http://en.wikipedia.org/wiki/Globally_unique_identifier:
算法
在用于生成新(V1)GUID的OSF指定算法中,用户的网卡MAC地址用作最后一组GUID数字的基础,这意味着,例如,可以将文档追溯到计算机,创造了它。在找到Melissa蠕虫的创造者时使用了这个隐私漏洞[2]。大多数其他数字基于生成GUID时的时间。
包含MAC地址和时间的V1 GUID可以通过第三组数字的第一个位置中的数字“1”来标识,例如{2f1e4fc0-81fd-11da-9156-00036a0f876a}。
V4 GUID使用后面的算法,这是一个伪随机数。它们在相同位置具有“4”,例如{38a52be4-9352-453e-af97-5c3b448652f0}。更具体地说,'data3'位模式在第一种情况下是0001xxxxxxxxxxxx,在第二种情况下是0100xxxxxxxxxxxx。 WinAPI GUID生成器的密码分析表明,因为V4 GUID的序列是伪随机的;在完全了解内部状态的情况下,可以预测先前和后续的值。[3]。