php 在Laravel中生成随机数

u0njafvf  于 2022-12-10  发布在  PHP
关注(0)|答案(6)|浏览(527)

请在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我已经尝试了所有我可以,但没有成功,请任何帮助的解决方案将不胜感激,谢谢

rn0zuynd

rn0zuynd1#

如果你想生成你所说的随机字符串,替换:

$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)。

igetnqfo

igetnqfo2#

这应该会给予你2和50之间的随机数。

$randomId       =   rand(2,50);
4si2a6ki

4si2a6ki3#

请使用函数兰德。
示例:

echo rand(0, 99999);
q9rjltbz

q9rjltbz4#

在laravel中,Str类已在 Bootstrap 中使用别名

use Illuminate\Support\Str;
//...
echo Str::upper(Str::random(16)); // J1NMDQAFD5LM9DK5

手动创建

生成随机数

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函数
从数组中选取一个或多个随机项,并返回随机项的密钥。它使用不适合加密用途的伪随机数生成器。

qvsjd97n

qvsjd97n5#

假设您传递给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);
}
fv2wmkja

fv2wmkja6#

可以使用rand()函数生成一个随机数,也可以创建一些字符并将其作为rand()的前缀。

相关问题