【问题标题】:Random number that is 15 characters long and positive15 个字符长的正数随机数
【发布时间】:2012-12-17 08:25:27
【问题描述】:

我正在尝试使用 php 生成长度正好为 15 个字符且为正数的随机数。我尝试了rand(100000000000000, 900000000000000),但它仍然会生成负数和小于 15 的数字。是否有我缺少的另一个函数可以做到这一点,或者我应该只使用 rand(0, 9) 15 次并连接结果?

【问题讨论】:

  • 对于它的价值,rand 没有损坏,只是您使用的数字大于您机器上 int 的大小,这就是您看到奇怪的原因结果。
  • Using long int in PHP 的可能重复项

标签: php random


【解决方案1】:
$i = 0;
$tmp = mt_rand(1,9);
do {
    $tmp .= mt_rand(0, 9);
} while(++$i < 14);
echo $tmp;

【讨论】:

  • int mt_rand ( int $min , int $max ) 是要走的路。我会用这个答案。 +1
  • @ROYFinley mt_rand() 有什么特别之处?
  • @ZOLDIK :在PHP 7.1 there were issues 之前。这些问题现已解决,rand() 成为mt_rand() 的别名。
【解决方案2】:

您使用的是 32 位平台。要处理这些整数,您需要一个 64 位平台。

您可以执行两次 rand 并将其保存为字符串,如下所示:

$num1 = rand(100000,999999);
$num2 = rand(100000,999999);
$num3 = rand(100,999);
$endString = $num1.$num2.$num3;

PS。我比我更喜欢跳跳虎解决方案。

【讨论】:

  • 安全到 2bil (10chr) 所以一个 7 位的 mt_rand 和另一个 8 位的 mt_rand 就可以了,也是 99999999 而不是 9000000
  • 你是对的。我不确定这个数字,所以我谨慎行事。
  • max=2,147,483,647 所以9个有效数字
【解决方案3】:

请记住,这将返回一个字符串,而不是实际的整数值。

function randNum($length)
{
    $str = mt_rand(1, 9); // first number (0 not allowed)
    for ($i = 1; $i < $length; $i++)
        $str .= mt_rand(0, 9);

    return $str;
}

echo randNum(15);

【讨论】:

    【解决方案4】:

    给你。

    function moreRand($len) { 
        $str = mt_rand(1,9);
        for($i=0;$i<$len-1;$i++) { 
            $str .= mt_rand(0, 9);
        }
        return $str;
    }
    echo moreRand(15); 
    

    编辑:如果您想将执行时间缩短 0.00045 秒,

     function randNum() { return abs(rand(100000000000000, 900000000000000)); }
    

    【讨论】:

    • 请记住,这可能会返回 0 作为第一个“数字”,从技术上讲,这将是一个 14 位数字。
    • 哎呀。注意力不足。固定。
    猜你喜欢
    • 2018-01-25
    • 1970-01-01
    • 2011-02-17
    • 1970-01-01
    • 1970-01-01
    • 2017-05-20
    • 1970-01-01
    • 2016-04-12
    • 1970-01-01
    相关资源
    最近更新 更多