请正在开发一个关于Laravel的项目,我想以这种格式生成一个随机数:任意位置的一个字符和其余的整数。示例: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我已尽力而为但没有成功,请任何帮助解决方案将不胜感激,谢谢
答案 0 :(得分:13)
如果你想像你说的那样生成随机字符串,请替换:
$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)。
答案 1 :(得分:1)
您可以使用rand()
函数生成一个随机数。
您还可以创建一些字符,并在rand()
前面加上前缀。
答案 2 :(得分:1)
生成随机数
echo generateRandomString(6) // Ex j4nDqQRiYafD
function generateRandomString(int $n=0)
{
$al = ['a','b','c','d','e','f','g','h','i','j','k'
, 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u',
'v', 'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E',
'F','G','H','I','J','K', 'L', 'M', 'N', 'O', 'P',
'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z',
'0', '2', '3', '4', '5', '6', '7', '8', '9'];
$len = !$n ? random_int(7, 12) : $n; // Chose length randomly in 7 to 12
$ddd = array_map(function($a) use ($al){
$key = random_int(0, 60);
return $al[$key];
}, array_fill(0,$len,0));
return implode('', $ddd);
}
使用 range 函数
<块引用>range — 创建一个包含一系列元素的数组 创建一个包含一系列元素的数组。
使用 array_rand 函数
<块引用>从数组中挑选一个或多个随机条目,并返回随机条目的键(或多个键)。它使用不适合加密目的的伪随机数生成器。
答案 3 :(得分:1)
使用 rand 函数。
示例:
echo rand(0, 99999);
答案 4 :(得分:0)
假设你传递给generatePin的$number
是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);
}
答案 5 :(得分:0)
这应该给您2到50之间的随机数。
$randomId = rand(2,50);