为参考ID生成随机但唯一的数字

时间:2013-02-08 22:47:33

标签: php random

我想生成唯一的数字,以便我可以将它们用作参考号来处理我的客户请求。

我不希望数字重复,我也不使用任何数据库存储数字。

我只是想用一个简单的算法来生成随机数。

我正在使用像

这样的东西

rand(10*45, 100*98)

是否可以做类似的事情。 我知道我的要求似乎很奇怪,但我只是想知道它是否可能。

3 个答案:

答案 0 :(得分:6)

为什么不用Unix时间戳作为随机数的前缀?这将确保唯一性。

$random = time() . rand(10*45, 100*98);

否则,您可以将数字存储在文件中。如果可以,请将它们存储在数据库中。

答案 1 :(得分:4)

为什么不使用php提供的功能:

uniqid

示例:

uniqid(rand(10*45), true)

答案 2 :(得分:2)

如果您接受十六进制数字,则:

function random_id($bytes) {
    $rand = mcrypt_create_iv($bytes, MCRYPT_DEV_URANDOM);
    return bin2hex($rand);
}
echo random_id(5); // Ex: a06e0e4e72

5个字节(即40位)产生大约2 ^ 40(大约一万亿)个可能的唯一值。它应该足够随机,以创建许多唯一ID。