在Laravel中生成随机数

kac*_*ack 8 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;
}
Run Code Online (Sandbox Code Playgroud)

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

Luí*_*ruz 14

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

$string = str_random(15);
Run Code Online (Sandbox Code Playgroud)

// 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);
Run Code Online (Sandbox Code Playgroud)

编辑:

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


小智 9

这将为您提供 2 到 50 之间的随机数。

$randomId       =   rand(2,50);
Run Code Online (Sandbox Code Playgroud)


jei*_*onp 8

使用函数兰特。

例子:

 echo rand(0, 99999);
Run Code Online (Sandbox Code Playgroud)


Pas*_*ery 6

在 Laravel 中,Bootstrap 中已经有 Str 类的别名

\n
use Illuminate\\Support\\Str;\n//...\necho Str::upper(Str::random(16)); // J1NMDQAFD5LM9DK5\n
Run Code Online (Sandbox Code Playgroud)\n

手动创建

\n

生成随机数

\n
echo generateRandomString(6) // Ex j4nDqQRiYafD\n
Run Code Online (Sandbox Code Playgroud)\n

执行

\n
function generateRandomString(int $n=0)\n{\n  $al = [\'a\',\'b\',\'c\',\'d\',\'e\',\'f\',\'g\',\'h\',\'i\',\'j\',\'k\'\n  , \'l\', \'m\', \'n\', \'o\', \'p\', \'q\', \'r\', \'s\', \'t\', \'u\',\n  \'v\', \'w\', \'x\', \'y\', \'z\', \'A\', \'B\', \'C\', \'D\', \'E\',\n  \'F\',\'G\',\'H\',\'I\',\'J\',\'K\', \'L\', \'M\', \'N\', \'O\', \'P\',\n  \'Q\', \'R\', \'S\', \'T\', \'U\', \'V\', \'W\', \'X\', \'Y\', \'Z\',\n  \'0\', \'2\', \'3\', \'4\', \'5\', \'6\', \'7\', \'8\', \'9\'];\n\n  $len = !$n ? random_int(7, 12) : $n; // Chose length randomly in 7 to 12\n\n  $ddd = array_map(function($a) use ($al){\n    $key = random_int(0, 60);\n    return $al[$key];\n  }, array_fill(0,$len,0));\n  return implode(\'\', $ddd);\n}\n
Run Code Online (Sandbox Code Playgroud)\n

使用范围函数

\n
\n

range \xe2\x80\x94 创建包含一系列元素的数组\n创建包含一系列元素的数组。

\n
\n

使用array_rand函数

\n
\n

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

\n
\n