如何使用PHP创建随机字符串?
我知道PHP中的rand函数生成随机整数,但是生成随机字符串的最佳方法是什么,例如:
原始字符串,9 个字符
$string = 'abcdefghi';
限制为 6 个字符的随机字符串示例
$string = 'ibfeca';
更新:我发现了大量这些类型的函数,基本上我试图理解每个步骤背后的逻辑。
更新:该函数应根据需要生成任意数量的字符。
如果您回复,请评论这些部分。
我知道PHP中的rand函数生成随机整数,但是生成随机字符串的最佳方法是什么,例如:
原始字符串,9 个字符
$string = 'abcdefghi';
限制为 6 个字符的随机字符串示例
$string = 'ibfeca';
更新:我发现了大量这些类型的函数,基本上我试图理解每个步骤背后的逻辑。
更新:该函数应根据需要生成任意数量的字符。
如果您回复,请评论这些部分。
如果要允许重复出现字符,可以使用以下函数:
function randString($length, $charset='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789')
{
$str = '';
$count = strlen($charset);
while ($length--) {
$str .= $charset[mt_rand(0, $count-1)];
}
return $str;
}
基本算法是生成<长度>乘以0到<字符数之间的随机数> − 1,我们用作索引,从我们的集合中选择一个字符并连接这些字符。0 和 < 个字符数> − 1 边界表示字符串的边界,因为第一个字符的地址为 ,最后一个字符的地址为 。$charset
$charset[0]
$charset[count($charset) - 1]
好吧,你没有澄清我在评论中问的所有问题,但我假设你想要一个函数,可以接受一串“可能”的字符和一段字符串来返回。为了清楚起见,按照要求进行了彻底的评论,使用了比我通常更多的变量:
function get_random_string($valid_chars, $length)
{
// start with an empty random string
$random_string = "";
// count the number of chars in the valid chars string so we know how many choices we have
$num_valid_chars = strlen($valid_chars);
// repeat the steps until we've created a string of the right length
for ($i = 0; $i < $length; $i++)
{
// pick a random number from 1 up to the number of valid chars
$random_pick = mt_rand(1, $num_valid_chars);
// take the random character out of the string of valid chars
// subtract 1 from $random_pick because strings are indexed starting at 0, and we started picking at 1
$random_char = $valid_chars[$random_pick-1];
// add the randomly-chosen char onto the end of our string so far
$random_string .= $random_char;
}
// return our finished random string
return $random_string;
}
要使用示例数据调用此函数,可以将其称为:
$original_string = 'abcdefghi';
$random_string = get_random_string($original_string, 6);
请注意,此函数不检查传递给它的有效字符中的唯一性。例如,如果您使用有效的字符字符串来调用它,则为每个字母选择 A 作为 B 的可能性要高出三倍。这可以被认为是一个错误或一个功能,这取决于你的需要。'AAAB'