可能重复:
PHP: How to generate a random, unique, alphanumeric string?如何在PHP中生成一个唯一的数字ID?
请问这个公式产生冲突?
substr(md5(uniqid(rand()))),0,6)
如何仅用数字(即7位数字)生成唯一ID?
可能重复:
PHP: How to generate a random, unique, alphanumeric string?如何在PHP中生成一个唯一的数字ID?
请问这个公式产生冲突?
substr(md5(uniqid(rand()))),0,6)
如何仅用数字(即7位数字)生成唯一ID?
uniqid生成一个13个字符的字符串,如何将它减少到7个字符或7位数字没有碰撞风险?
只要你的意思碰撞而调换的uniqid
输出到一个新的表示,你可以做如下所示:
uniqid
返回13个字符的字符串,每个字符可以是0-9
或a-f
,所以基本上是一个十六进制数字,一个地方,0-15十进制。实施例:
$unique = uniqid(); # 13 characters
$sevenPairs = array_map('hexdec', str_split($unique, 2));
printf("Unique ID: %s\nSeven Pairs (digits): %s\n"
, $unique, implode(', ', $sevenPairs));
输出:
Unique ID: 4f8ace1eb736a
Seven Pairs (digits): 79, 138, 206, 30, 183, 54, 10
要小心,如果你使用前缀部的(在你的问题你使用rand
),该retur的长度ned string by uniqid
可以大于13.
最简单的方法是从数据库或文本文件中获取数据,从0开始,每个ID增加1。
$id = strint(file_get_contents('counter.txt'));
file_put_content('counter.txt',++$id);
使用rand()时,您将有更大的机会获得相同的数字。 如果您不想要增量值,请使用rand并检查数字是否已用于数据库。
如果您只想要数字并且希望避免冲突,唯一的方法是使用自动增量值。任何随机值将有足够的时间和足够大的样本的冲突的可能性。 – 2012-04-15 12:10:29
在您的情况下,生成超过1000万个ID将会导致100%的冲突:) – nico 2012-04-15 12:11:40
这个网站上的其他类似问题都没有帮助吗? – DanMan 2012-04-15 12:12:00