假设我想把一个guid设置为我的应用程序的程序集guid。从互联网上搜索得知,我们可以使用
(new Guid()).Next()
来获取一个新的唯一值。
我无法确定我的guid在其他guid中是唯一的。如果您知道如何确保,请解释一下。
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 个GUIDs。如果你每秒创建1000个GUIDs,那么在达到一百万分之一的风险之前,你可以持续进行近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 worm的创造者时使用了这个隐私漏洞[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]。