【发布时间】:2010-12-01 13:51:45
【问题描述】:
我正在寻找一种使用 PHP 生成 大 随机数的方法,例如:
mt_rand($lower, $upper);
我看到的更接近的是gmp_random(),但是它不允许我仅指定每个肢体的位数(我不知道它是什么)的下限和上限。
编辑:Axsuuls 的答案似乎与我想要的非常接近,并且与 gmp_random 非常相似,但是在一种情况下似乎只有一个缺陷。
假设我不想得到一个随机数:
- 1225468798745475454898787465154
和:
- 1225468798745475454898787465200
所以如果函数调用BigRandomNumber():
BigRandomNumber($length = 31);
这可以轻松返回超出指定边界的 9999999999999999999999999999999。
如何使用最小/最大边界而不是长度值?
BigRandomNumber('1225468798745475454898787465154', '1225468798745475454898787465200');
这应该返回一个介于 1225468798745475454898787465 [154 .. 200]之间的随机数。
作为参考,我认为解决方案可能必须使用function supplied in this question。
编辑:上面的帖子已被删除,这里是:
function compare($number1, $operator, $number2) {
$x = bccomp($number1, $number2);
switch($operator) {
case '<':
return -1===$x;
case '>':
return 1===$x;
case '=':
case '==':
case '===':
return 0===$x;
case '!=':
case '!==':
case '<>':
return 0!==$x;
}
}
【问题讨论】:
-
您是在寻找随机数还是随机数字字符串? .. 你打算用这个函数调用的结果做什么?如果您想要的值是 > PHP_INT_MAX ,那么操作它就成了一个问题..
-
您的最后一个链接(“此问题中提供的功能”)已损坏。
-
@robguinness:修复它。
-
在我看来,像问题描述的那样的函数对于需要生成随机大数的人来说非常有用。我决定在我的应用程序中使用给出的函数作为接受的答案,但在这样做之前,我运行了一些测试来测量它的性能。它表现得很好,我很乐意分享结果。我将首先尝试通过编辑已接受的答案来添加它们。