基本上这是不可能的!机会极其微小。
但是...我是世界上唯一一个我知道曾经发生过GUID冲突的人(是的!)。
我很确定这一点,而且这不是一个错误。
它是如何发生的呢?在运行于Pocket PC上的一个小应用程序中,在操作结束时必须发出一个生成的GUID命令。该命令在服务器上执行后,将与执行日期一起存储在服务器上的命令表中。有一天当我在调试时,我发出了模块命令(附带新生成的GUID),但没有任何反应。我再次尝试(使用相同的GUID,因为GUID只在操作开始时生成一次),但还是没有反应。最终,为了找出命令为什么没有执行,我检查了命令表,发现与当前GUID相同的GUID已经在3周前插入了。我不相信这个结果,于是我从2周前的备份中恢复了数据库,发现GUID还在那里。检查代码,新的GUID肯定是新生成的。Pow,GUID冲突,只发生了一次,但我真希望我能赢得彩票,机会更大:)。
编辑:有一些因素可能会大大增加这种情况发生的机会,应用程序运行在PocketPC模拟器上,并且模拟器具有保存状态功能,这意味着每次恢复状态时本地时间也会恢复,并且GUID是基于内部计时器的...此外,紧凑框架的GUID生成算法可能比COM更不完整...
你是数学家吗?那么是的。
你是工程师吗?那么不是。
理论上讲,它们是可能存在的,但由于UUID有3.4E38个可能的编号,每年创建数万亿个GUID时出现重复的概率仅为0.00000000006 (参考资料)。
如果两个用户最终拥有了相同的GUID,我敢打赌这是程序中导致数据被复制或共享的一个漏洞。
两个随机GUID重复的概率(约为10的38次方分之1)比未检测到损坏的TCP/IP数据包的概率(约为10的10次方分之1)更低。详情请查看http://wwwse.inf.tu-dresden.de/data/courses/SE1/SE1-2004-lec12.pdf第11页。磁盘驱动器、光驱等也是如此…
GUID通常是唯一的,从数据库中读取的数据仅在统计学上正确。
在这种情况下,我认为奥卡姆剃刀原理是一个很好的指导。你遇到GUID碰撞的概率极小,更有可能是出了Bug或者是有人篡改了你的数据。
如果两台安装有以太网卡且MAC地址重复的Win95机器在严格控制条件下运行,尤其是例如建筑停电后它们恰好同时启动,那么它们将发出重复的GUIDS。
我知道人们喜欢听到GUID是神奇的,能够保证唯一性的回答,但实际上,大多数GUID只是121位随机数(其中七位用于格式化而被浪费)。如果您不舒服使用一个大随机数,那么您也不应该使用GUID。