Генерируем человеко-читабельные случайные строки.
Всем привет! Недавно столкнулся с необходимостью генерить юзернеймы (ники) для одного PHP скрипта.
Смысл заключается в том, чтоб сгенерировать случайную последовательность из N англ. алфавитных символов (например от пяти до десяти) таким образом, чтоб полученное "слово" было читабельным и похожим на реально возможный ник.
Такое же решение хорошо подойдет для генерации каптчи (CAPTCHA). Наверняка вы сталкивались с ситуацией, когда набор символов на рисунке CAPTCHA весьма похож на "человеческое" слово, – для реального юзера приятней и легче ввести код…
Итак, функция для генерации чего-то человекочитабельного:
function make_username($from, $to)
{
$arr = array();
for ($i = 97; $i < 123; $i++) {
$arr[] = chr($i);
}$glasnye=array(”a”, “e”, “i”, “o”, “u”, “y”);
$soglasnye=array_diff($arr, $glasnye);// Length
$cout=mt_rand ($from, $to);
$login=”";$first=mt_rand(0, 1);
if ($first==1)
{
$array1=$glasnye;
$array2=$soglasnye;
}
else
{
$array1=$soglasnye;
$array2=$glasnye;
}for ($j=0; $j<=$cout; $j++)
{
if ($j%2) $usedarray=$array1;
else $usedarray=$array2;
$login.=$usedarray[mt_rand(0, count($usedarray)-1)];
}
return ($login);
}
Подробнее, что это было:
Создаем массив из англ. алфавитных символов (тобишь буков). Затем создаем два отдельных массива с гласными и согласными. Выбираем случайную длину строки (между двумя заданными значениями), выбираем, какой символ будет первым – гласный или согласный, и генерим слово.
Спасибо за внимание. Надеюсь, пригодится





апреля 7, 2010 at 01:23
Наже – моя функция аналогичная описанной, но работающая ровно в 2 раза БЫСТРЕЕ
===
//optimized by a_h & used on http://www.0973.ru
function make_username($from, $to)
{
$glas=array(“a”, “e”, “i”, “o”, “u”, “y”);
$sogl=array(“b”, “c”, “d”, “f”, “g”, “h”, “j”, “k”, “l”, “m”, “n”, “p”, “q”, “r”, “s”, “t”, “v”, “w”, “x”, “z”);
$cout=mt_rand($from, $to);
$login=”";
$kk=mt_rand(0, 1);
$j=0;
while ($j <= $cout)
{
if ($kk%2) {$login.=$glas[mt_rand(0, 5)];}
else {$login.=$sogl[mt_rand(0, 19)];}
$j++;
$kk++;
}
return ($login);
}
===
Добавить комментарий
Вы должны войти