代码之家  ›  专栏  ›  技术社区  ›  Nam G VU

如何确保生成的guid全局唯一?

  •  11
  • Nam G VU  · 技术社区  · 15 年前

    (new Guid()).Next() 以获得新的唯一值。

    我搞不懂我的guid是如何被证明是独一无二的?如果你知道怎么做,请解释。

    3 回复  |  直到 10 年前
        1
  •  6
  •   Community Mohan Dere    9 年前

    它不是,但是它的生成方式和表示方式使得在这个milenium中生成两个相同guid的概率几乎为零。

    见: Simple proof that GUID is not unique

        2
  •  7
  •   Jonas Elfström    15 年前

    看起来 V4 是Windows上的标准GUID。如果它纯粹是基于一个伪随机数生成器,正如维基百科所指出的,它会受到 Birthday problem .

    我看过几个使用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,你可以在达到一百万个重复的风险之前,继续这样做近206667年。 6,52191054316287e15/(3600*24*365,25*1000) ≈ 206666,874006986

        3
  •  3
  •   Pieter van Ginkel    15 年前

    http://en.wikipedia.org/wiki/Globally_unique_identifier

    算法

    在OSF指定的生成新(V1)GUID的算法中,用户的网卡MAC地址用作最后一组GUID数字的基数,这意味着,例如,可以将文档跟踪回创建它的计算机。这个隐私漏洞是在定位Melissa蠕虫的创建者时使用的[2]。大多数其他数字是基于生成GUID时的时间。

    包含MAC地址和时间的V1 guid可以由第三组数字的第一个位置的数字“1”标识,例如{2f1e4fc0-81fd-11da-9156-00036a0f876a}。

    推荐文章