生成具有预定义长度PHP的随机数

Kar*_*arl 11 php random numbers

我正在尝试使用mt_rand()创建一个函数,以便生成一个真正的随机数,因为rand()只是不够.

问题是我需要预先定义数字的长度,比如我需要一个10位数的随机数.

无论如何,我一直在搞乱,这就是我想出来的:

    function randomNumber($length) {
        $min = str_repeat(0, $length-1) . 1;
        $max = str_repeat(9, $length);
        return mt_rand($min, $max);   
    }
Run Code Online (Sandbox Code Playgroud)

在理论上应该工作(据我所知),但事实并非如此.长度是完全随机的,它也抛出负值.

有任何想法吗?

Ry-*_*Ry- 30

除非你有一个量子静态的东西,否则你无法得到一个真正随机的数字.但是,在基于Unix的操作系统上/dev/urandom,如果您确实需要,则可以使用"更多随机性".

无论如何,如果你想要一个n位数字,那就是你应该得到的:n个数字.

function randomNumber($length) {
    $result = '';

    for($i = 0; $i < $length; $i++) {
        $result .= mt_rand(0, 9);
    }

    return $result;
}
Run Code Online (Sandbox Code Playgroud)

现有的代码是不工作的原因是因为0000...01仍然1mt_rand,同时又有mt_rand的范围不是无限的.负数是整数溢出.


Ray*_*Ray 6

简短而甜美:

我只假设合法数字,而不是像00010这样的字符串。请尝试使用数字的大小为:

  $min = pow(10, $length - 1) ;
  $max = pow(10, $length) - 1;
  return mt_rand($min, $max);   
Run Code Online (Sandbox Code Playgroud)

唯一不起作用的是长度为1时,单个数字“ 0”将不可能返回。


Jaz*_*zer 6

这是我正在使用的:

function random_number($length)
{
    return join('', array_map(function($value) { return $value == 1 ? mt_rand(1, 9) : mt_rand(0, 9); }, range(1, $length)));
}
Run Code Online (Sandbox Code Playgroud)

一条线,又好又简单!该数字永远不会以0开头,并且在任何其他地方允许0.


小智 6

just sepcify the range to rand method , if you need 4 digit random number then just use it as

rand(1000,9999);
Run Code Online (Sandbox Code Playgroud)