Генерировать случайное число в Laravel

пожалуйста, я работаю над проектом на Laravel, и я хотел создать случайное число в этом формате: один символ в любом порядке позиции и остальные целые числа. Пример: C87465398745635, 87474M745436475, 98487464655378J8 etc. а это мой контролер:--2-->

    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 я пробовал все, что мог, но без успеха, пожалуйста, любое помогающее решение будет оценено, Спасибо

2 ответов


Если вы хотите создать случайную строку, как вы сказали, замените:

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

Edit:

раньше код не генерировал случайный Альфа-символ все время. Потому что Laravel-это str_random генерирует случайную Альфа-числовую строку, и иногда эта функция возвращает числовое значение (см. docs).


предполагая, что $number вы передаете на generatePin длина 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);
}