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できることはすべて試しましたが、成功しませんでした。
あなたが言ったようにランダムな文字列を生成したい場合は、置き換えてください:
$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
はランダムな英数字の文字列を生成し、その関数が数値を返すこともあります( ドキュメントを参照 )。
$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);
}