Лекции     Книги     Рефераты    
Диплом, курсовая на заказ

Генерируем человеко-читабельные случайные строки.

news date Авг.10.2009    categories Web-программирование > PHP    comments (1)

Всем привет! Недавно столкнулся с необходимостью генерить юзернеймы (ники) для одного 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);
}

Подробнее, что это было:

Создаем массив из англ. алфавитных символов (тобишь буков). Затем создаем два отдельных массива с гласными и согласными. Выбираем случайную длину строки (между двумя заданными значениями), выбираем, какой символ будет первым – гласный или согласный, и генерим слово.

Спасибо за внимание. Надеюсь, пригодится :)


Обсуждения

1 комментарий к “Генерируем человеко-читабельные случайные строки.”
  1. a_h пишет:

    Наже – моя функция аналогичная описанной, но работающая ровно в 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);
    }
    ===

Добавить комментарий

Вы должны войти



© 2009 - 2010 | Webteach.ru | Образовательный портал