我使用以下 Perl 代码生成随机字母数字字符串(仅限大写字母和数字),用作 MySQL 数据库中记录的唯一标识符。数据库的行数可能会保持在 1,000,000 行以下,但实际的绝对最大值约为 3,000,000 行。我是否有 2 条记录具有相同随机代码的危险机会,或者这种情况发生的次数可能微不足道?我对概率知之甚少(如果从这个问题的本质来看还不是很清楚的话)并且希望有人提供意见。
perl -le 'print map { ("A".."Z", 0..9)[rand 36] } 1..6'
因为生日悖论 http://en.wikipedia.org/wiki/Birthday_problem这比你想象的更有可能。
有 2,176,782,336 个可能的代码,但即使只插入 50,000 行,发生冲突的可能性也已经相当高了。对于 1,000,000 行,几乎不可避免地会出现许多冲突(我认为平均约为 250 次)。
我运行了一些测试,这是在第一次碰撞发生之前我可以生成的代码数量:
随着代码数量的增加,冲突将变得更加频繁。
这是我的测试代码(用 Python 编写):
>>> import random
>>> codes = set()
>>> while 1:
code=''.join(random.choice('1234567890qwertyuiopasdfghjklzxcvbnm')for x in range(6))
if code in codes: break
codes.add(code)
>>> len(codes)
36909
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)