这是我的代码
<?php
function random_id() {
$chars = 'abcdefghijklmnopqrstuvwxyz1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ';
$id = '';
for ($i = 0; $i < 5; ++$i)
{
$id .= $chars[rand(1, 26)];
}
echo $id;
}
random_id();
?>
它一直生成带有5个小写数字的ID,而且偶尔它会有一个数字。我也尝试使用mt_rand()
,并在循环之前的脚本开头使用srand(time())
和srand(microtime())
。
此外,它应该是rand(1, 26)
还是rand(0, 25)
?
答案 0 :(得分:8)
您的字符串超过26个字符。请改用此rand函数:
rand(0, strlen($chars) - 1)
因此,您不是在每次迭代时计算字符串长度,而是保持动态,因此值得考虑将计算移到循环之外,如下所示:
$chars = 'abcdefghijklmnopqrstuvwxyz1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ';
$chars_cnt = strlen($chars) - 1;
for ($i = 0; $i < 5; ++$i)
{
$id .= $chars[rand(1, $chars_cnt)];
}
答案 1 :(得分:4)
您没有生成一个足以获得整个数组的随机数。
小写字符:0-25
数字:26-35
大写汽车:36-61
答案 2 :(得分:2)
0
是起始点,strlen($chars)
是$str
字符串中的字符数。
您应该将代码更改为:
for ($i = 0; $i < 5; ++$i)
{
$id .= $chars[rand(0, strlen($chars)-1)];
}
答案 3 :(得分:1)
我认为您需要记住使用大于26的数字,因为这是字母表中的字母数,您可能要使用26 + 26 + 10 = 62:
$id .= $chars[rand(0, 61)];
干杯!
答案 4 :(得分:1)
PHP中的数组是零索引的,所以是的,调用中的第一个数字应为零。你也只是从阵列的开头挑选。
使用它代替:
for ($i = 0; $i < 5; ++$i)
{
$id .= $chars[rand(0, 61];
}
答案 5 :(得分:1)
你的$ chars包含一个长度为&gt;的字符串。 26但你的随机数在1到26之间(含)。字符串索引以0开头,即char a。现在只使用字符bcd ... xyz1。您可以动态检查字符串长度并获得有效的随机数。
function random_id() {
$chars = 'abcdefghijklmnopqrstuvwxyz1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ';
$chars_cnt = strlen($chars)-1;
$id = '';
for ($i = 0; $i < 5; ++$i)
{
$id .= $chars[rand(0, $chars_cnt)];
}
return $id;
}
echo random_id();