Это основано на решении Gumbo , добавляя функциональность в список набора символов, которые будут пропущены в базовом наборе символов. Случайная строка выбирает символы из $base_charset
, которые также не отображаются в $skip_charset
.
/* Make a random string of length using characters from $charset, excluding $skip_chars.
* @param length (integer) length of return value
* @param skip_chars (string) characters to be excluded from $charset
* @param charset (string) characters of posibilities for characters in return val
* @return (string) random string of length $length */
function rand_string(
$length,
$skip_charset = '',
$base_charset='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'){
$skip_len = strlen($skip_charset);
for ($i = 0; $i<$skip_len; $i++){
$base_charset = str_replace($skip_charset[$i], '', $base_charset);
}
cvar_dump($base_charset, '$base_charset after replace');
$str = '';
$count = strlen($base_charset);
while ($length--) {
$str .= $base_charset[mt_rand(0, $count - 1)];
}
return $str;
}
Вот несколько примеров использования. В первых двух примерах используется значение по умолчанию для $base_charset
. Последний пример явно определяет $base_charset
.
echo rand_string(15, 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz');
// 470620078953298
echo rand_string(8, 'abcdefghijklmnopqrstuvwxyz0123456789');
// UKLIHOTFSUZMFPU
echo rand_string(15, 'def', 'abcdef');
// cbcbbccbabccaba