生成具有限制数字的随机值


Generating random values with restricted digits

用一组受限制的数字生成随机整数的最佳方法是什么?

我想生成一个4位数的随机数,其中每个数字在[1..6]的范围内。我想生成一个范围为[0..]1295],然后转换为以6为基数并自增数字,但这要经过一个字符串。

如果不进行字符串转换,并且只调用一次随机数生成器,您可以这样做:

function myRandom() {
    $num = mt_rand(0, 1295);
    $result = 0;
    for ($i = 0; $i < 4; $i++) {
        $result = $result*10 + $num % 6;
        $num = floor($num / 6);
    }
    return $result + 1111;
}

您可以像这样分别生成每个数字:

$result = '';
for ($i=0; $i < 4; $i++) { 
    $result .= mt_rand(1, 6);
}
$result = (int) $result;

或者如果不喜欢使用字符串,可以使用math:

$result = 0;
for ($i=0; $i < 4; $i++) {
    $result += mt_rand(1, 6) * 10 ** $i;
    // or for PHP versions < 5.6 (no ** exponentiation operator)
    // $result += mt_rand(1, 6) * pow(10, $i); 
}
<?php
//  216_10 = 1000_6
// 1295_10 = 5555_6
base_convert(mt_rand(216,1295),10,6);