Генерировать случайное число в 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);
}