如何在PHP中生成唯一的数字ID?

时间:2012-04-15 12:07:43

标签: php uniqueidentifier

  

可能重复:
  PHP: How to generate a random, unique, alphanumeric string?

这个公式会产生碰撞吗?

substr(md5(uniqid(rand()))),0,6)

如何生成仅包含数字(即7位数)的唯一ID?

2 个答案:

答案 0 :(得分:1)

  

uniqid生成一个13字符串,如何将其减少到7个字符或7位数而没有碰撞风险?

只要您将uniqid的输出转换为新的表示形式时发生碰撞,就可以执行以下操作:

  • uniqid返回一个13个字符的字符串,每个字符可以是0-9a-f,所以基本上是一个十六进制数,一个地方,0-15十进制。
  • 好像你把其中两个转换成0到255之间的一个字符或数字,很容易将13 0-15个值减少到7 0-255个值:

示例:

 $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),则uniqid返回的字符串的长度可能大于13。

答案 1 :(得分:0)

最简单的方法是从数据库或文本文件中获取它,从0开始,并为每个ID递增1。

$id = strint(file_get_contents('counter.txt'));
file_put_content('counter.txt',++$id);

使用rand()时,你获得相同数字的可能性会更大。 如果您不想要增量值,请使用rand并检查该数字是否已用于数据库。