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

新手上路,请多包涵

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

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

不管怎样,我一直在胡闹,这就是我想出的:

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

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

有任何想法吗?

原文由 Karl 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 388
2 个回答

除非你有那些量子静态的东西之一,否则你无法获得真正的随机数。然而,在基于 Unix 的操作系统上, /dev/urandom 适用于“更多随机性”,如果您确实需要的话。

无论如何,如果您想要一个 n 位数字,那正是您应该得到的:n 个单独的数字。

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

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

    return $result;
}

The reason your existing code isn’t working is because 0000...01 is still 1 to mt_rand , and also that mt_rand ’s range isn ‘无限。负数是整数溢出。

原文由 Ry- 发布,翻译遵循 CC BY-SA 3.0 许可协议

只需将范围指定为 rand 方法,如果您需要 4 位随机数,则只需将其用作

rand(1000,9999);

原文由 Swapnil Ghone 发布,翻译遵循 CC BY-SA 4.0 许可协议

推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏