在Laravel中生成随机数

时间:2014-07-22 09:53:40

标签: php string random laravel

请正在开发一个关于Laravel的项目,我想以这种格式生成一个随机数:任意位置的一个字符和其余的整数。示例:C87465398745635,87474M745436475,98487464655378J8等,这是我的控制器:

    function generatePin( $number ) {
    $pins = array();
    for ($j=0; $j < $number; $j++) { 
        $string = str_random(15);
        $pin = Pin::where('pin', '=', $string)->first();
        if($pin){
            $j--;
        }else{
            $pins[$j] = $string;
        }
    }



    return $pins;
}

但它似乎正在生成这样的其他东西:ZsbpEKw9lRHqGbv,i7LjvSiHgeGrNN8,pyJEcjhjd3zu9Su我已尽力而为但没有成功,请任何帮助解决方案将不胜感激,谢谢

6 个答案:

答案 0 :(得分:13)

如果你想像你说的那样生成随机字符串,请替换:

$string = str_random(15);

// Available alpha caracters
$characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';

// generate a pin based on 2 * 7 digits + a random character
$pin = mt_rand(1000000, 9999999)
    . mt_rand(1000000, 9999999)
    . $characters[rand(0, strlen($characters) - 1)];

// shuffle the result
$string = str_shuffle($pin);

编辑:

之前,代码并没有始终生成随机字母字符。那是因为Laravel的str_random生成一个随机字母数字字符串,有时该函数返回一个数值(see docs)。

答案 1 :(得分:1)

您可以使用rand()函数生成一个随机数。 您还可以创建一些字符,并在rand()前面加上前缀。

答案 2 :(得分:1)

生成随机数

echo generateRandomString(6) // Ex j4nDqQRiYafD

实施

function generateRandomString(int $n=0)
{
  $al = ['a','b','c','d','e','f','g','h','i','j','k'
  , 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u',
  'v', 'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E',
  'F','G','H','I','J','K', 'L', 'M', 'N', 'O', 'P',
  'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z',
  '0', '2', '3', '4', '5', '6', '7', '8', '9'];

  $len = !$n ? random_int(7, 12) : $n; // Chose length randomly in 7 to 12

  $ddd = array_map(function($a) use ($al){
    $key = random_int(0, 60);
    return $al[$key];
  }, array_fill(0,$len,0));
  return implode('', $ddd);
}

使用 range 函数

<块引用>

range — 创建一个包含一系列元素的数组 创建一个包含一系列元素的数组。

使用 array_rand 函数

<块引用>

从数组中挑选一个或多个随机条目,并返回随机条目的键(或多个键)。它使用不适合加密目的的伪随机数生成器。

答案 3 :(得分:1)

使用 rand 函数。

示例:

 echo rand(0, 99999);

答案 4 :(得分:0)

假设你传递给generatePin的$number是pin的长度:

function generatePin( $number ) {
    // Generate set of alpha characters
    $alpha = array();
    for ($u = 65; $u <= 90; $u++) {
        // Uppercase Char
        array_push($alpha, chr($u));
    }

    // Just in case you need lower case
    // for ($l = 97; $l <= 122; $l++) {
    //    // Lowercase Char
    //    array_push($alpha, chr($l));
    // }

    // Get random alpha character
    $rand_alpha_key = array_rand($alpha);
    $rand_alpha = $alpha[$rand_alpha_key];

    // Add the other missing integers
    $rand = array($rand_alpha);
    for ($c = 0; $c < $number - 1; $c++) {
        array_push($rand, mt_rand(0, 9));
        shuffle($rand);
    }

    return implode('', $rand);
}

答案 5 :(得分:0)

这应该给您2到50之间的随机数。

$randomId       =   rand(2,50);