2014-07-22 403 views
3

請在Laravel上的Project上工作,我想用這種格式生成一個隨機數字:任意位置順序的一個字符和其餘整數。例如:C87465398745635,87474M745436475,98487464655378J8等,這是我的控制器:在Laravel生成隨機數

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

如果你想生成隨機字符串,替換:

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

+0

感謝這個作品,給我這些的結果:F2360463118,54475708163,8N182992222,4629231O991,1V387422817但缺什麼,我的看法是:1.這裏的第二個生成的數字(54475708163)沒有任何Alpha字符,這可能意味着某些會添加Alpha字符,而有些則不會是不好的或內聯的,2.我希望數字爲14數字和一個字母使它完全代替了我們在這裏的9個數字和1個Alpha字符,總共15個謝謝,我真的非常感謝! – kacyblack

+0

3.請我希望這種方法不會允許重複每個生成的數字,因爲這些生成的數字將同時發送給不同的人,如果重複,則會有用戶給定生成的數字的衝突。請問mt_rand有多安全,並且數字會在哪個間隔重複一次?謝謝 – kacyblack

+0

我已經更新了答案。至於你的意見: 1.對不起,這是真的。我像你一樣使用Laravel的'str_random'函數,該函數生成一個隨機字母數字字符串。 2.對不起,更正了更新後的答案。 3.我會說這種方法不可能產生相同的值,但它是可能的。如果你想要一個真正安全的發電機,我建議你看看這個功能http://php.net/manual/en/function.openssl-random-pseudo-bytes.php –

0

假設你傳遞generatePin的$number是腳的長度:

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