如何使用 PHP 创建随机字符串?
我知道 PHP 中的 rand 函数会生成随机整数,但是生成随机字符串的最佳方法是什么,例如:
I know that the rand function in PHP generates random integers, but what is the best way to generate a random string such as:
原始字符串,9 个字符
$string = 'abcdefghi';
示例随机字符串限制为 6 个字符
$string = 'ibfeca';
更新:我发现了大量这些类型的函数,基本上我试图理解每个步骤背后的逻辑.
UPDATE: I have found tons of these types of functions, basically I'm trying to understand the logic behind each step.
更新:该函数应根据需要生成任意数量的字符.
UPDATE: The function should generate any amount of chars as required.
如果您回复,请评论部分.
Please comment the parts if you reply.
推荐答案
好吧,你没有澄清我在评论中提出的所有问题,但我假设你想要一个可以接受一串可能的"字符和要返回的字符串长度.为清楚起见,按照要求进行了彻底评论,使用了比我平时更多的变量:
Well, you didn't clarify all the questions I asked in my comment, but I'll assume that you want a function that can take a string of "possible" characters and a length of string to return. Commented thoroughly as requested, using more variables than I would normally, for clarity:
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;
}
要使用您的示例数据调用此函数,您可以这样称呼它:
To call this function with your example data, you'd call it something like:
$original_string = 'abcdefghi';
$random_string = get_random_string($original_string, 6);
请注意,此函数不会检查传递给它的有效字符的唯一性.例如,如果您使用 'AAAB'
的有效字符字符串调用它,则为每个字母选择 A 作为 B 的可能性要高出三倍.这可能被认为是错误或功能,取决于您的需求.
Note that this function doesn't check for uniqueness in the valid chars passed to it. For example, if you called it with a valid chars string of 'AAAB'
, it would be three times more likely to choose an A for each letter as a B. That could be considered a bug or a feature, depending on your needs.
相关文章