web-dev-qa-db-ja.com

Laravel

Laravelでプロジェクトに取り組んでいます。この形式でランダムな番号を生成したいと思います。任意の位置順の1文字と残りの整数です。例: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できることはすべて試しましたが、成功しませんでした。

8
kacyblack

あなたが言ったようにランダムな文字列を生成したい場合は、置き換えてください:

$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はランダムな英数字の文字列を生成し、その関数が数値を返すこともあります( ドキュメントを参照 )。

14
Luís Cruz

$number generatePinを渡すと、ピンの長さになります。

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);
}
0
Vainglory07