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

3
我希望生成独一无二的数字,以便将其用作参考号来处理客户请求。
我不希望数字重复,也不使用任何数据库存储数字。
我只想使用简单的算法生成随机数。
我正在使用类似以下的内容
rand(10*45, 100*98)
是否可能这样做。 我知道我的要求看起来很奇怪,但我只是想知道是否可能。

我没有使用任何数据库,只是希望它像参考编号一样简单,该编号将通过邮件发送给客户和所有者,并且他们可以借助该参考编号进行沟通。 @njk的想法足够好并且合乎逻辑。 - prakashchhetri
必须是十进制吗(即基数为10)? - Sverri M. Olsen
不要求它是任何数字 - prakashchhetri
3个回答

8
为什么不在随机数前加上Unix时间戳呢?这样可以确保唯一性。
$random = time() . rand(10*45, 100*98);

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

1
只要你不在同一秒钟内生成两个,那就没问题。 - Sam Dufel
@SamDufel 可以使用 microtime - Kermit
将另一个随机字符串附加到原字符串以提高唯一性。 - Abel Callejo

4

为什么不使用 PHP 提供的函数来实现此目的呢:

uniqid

示例:

uniqid(rand(10*45), true)

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。


正如我所说,我只是在寻找数字。但还是谢谢你 :) - prakashchhetri

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接