Я хочу генерировать случайные строки, такие как:
sssder tvmwww 66rfdd 123123 oo007oo 1234 2020 1111 rrrr r8r8r uiuiu wewewe fefefe abced xyz..
В частности, мне нужна строка длиной от 5 до 8 символов, которую легко запомнить . Это возможно?
То, что вы ищете, является мнемоническим генератором строк, вот функция:
function Mnemonic($letters = 6) { $result = null; $charset = array ( 0 => array('b', 'c', 'd', 'f', 'g', 'h', 'j', 'k', 'l', 'm', 'n', 'p', 'q', 'r', 's', 't', 'v', 'w', 'x', 'y', 'z'), 1 => array('a', 'e', 'i', 'o', 'u'), ); for ($i = 0; $i < $letters; $i++) { $result .= $charset[$i % 2][array_rand($charset[$i % 2])]; } return $result; }
Обновлено для ввода цифр в конце строки:
function Mnemonic($letters = 6, $digits = 2) { $result = null; $charset = array ( 0 => array('b', 'c', 'd', 'f', 'g', 'h', 'j', 'k', 'l', 'm', 'n', 'p', 'q', 'r', 's', 't', 'v', 'w', 'x', 'y', 'z'), 1 => array('a', 'e', 'i', 'o', 'u'), ); for ($i = 0; $i < $letters; $i++) { $result .= $charset[$i % 2][array_rand($charset[$i % 2])]; } for ($i = 0; $i < $digits; $i++) { $result .= mt_rand(0, 9); } return $result; }
Вот источник для довольно сложного скрипта, который выполняет определение строки в стиле BNF и генерирует соответствующую строку путем случайного выбора возможностей. Эти страницы содержат некоторые примеры определений. Возможно, это может быть полезно.
См. Это сообщение для короткой PHP-функции для генерации случайной строки символов, используемой пользователем, указанной длины (так как это похоже на генератор паролей). Вот функция, скопированная с этого поста.
function rand_char($length) { $random = ''; for ($i = 0; $i < $length; $i++) { $random .= chr(mt_rand(33, 126)); } return $random; }
Это зависит от того, что вы хотите от строк. Из приведенных вами примеров кажется, что вам нужна двухступенчатая вещь; например, функция, которая генерирует трехсимвольную случайную строку, затем удваивает каждый символ; или повторяет строку; или повторяет первый символ три раза, второй два раза, а третий, но один раз.
В основном то, что вы, вероятно, хотите сделать, это создать «пул», например, подходящую короткую строку, созданную случайным образом выбранным методом (все числа, порядковые номера со случайным запуском, последовательные буквы, словальные части, выбранные случайным образом из словаря. .), а затем функцию, которая раздувает строку по некоторому принципу.
Попробуйте следующее: Случайный алфавитно-цифровой скрипт генератора строк в PHP
Если это для случайного идентификатора или что-то похожее, я рекомендую
uniqid (…)
http://us3.php.net/manual/en/function.uniqid.php> http://us3.php.net/manual/en/function.uniqid.php
Используйте генетический алгоритм. Настройте свою фитнес-функцию, чтобы решить, как «случайная» ваша строка (т. Е. Соседствуют два согласных?) Ну, это не так хорошо, как символ или номер рядом с согласным … но насколько далеко друг от друга согласные в алфавите? они в одном и том же случае?) Пусть он работает пару дней, и вам гарантированно найдется самая причудливая, самая случайная строка из 5-8 символов, о которой вы когда-либо надеялись.
Я начну с нескольких личных догадок о «легко запоминающемся»:
Строку обычно легко запомнить, если есть один или несколько шаблонов, например:
Напишите программу, которая «забивает» случайные последовательности, созданные на основе правил, и берет верхние бомбардиры. Это похоже на метод Монте-Карло для поиска нужного вам результата. Вы можете настроить свой метод подсчета очков, если вам не нравится результат.
Конечно, есть и другие «легко запоминающиеся» строки, которые не соответствуют приведенному выше:
Легкий подход может быть:
1) инициализировать пустую строку
2) генерирует случайное число между [0,25]
3) Добавить 97 к этому номеру
4) генерирует символ для этого числа
5) добавьте символ в существующую строку
* выполните шаги 1-5 для количества раз, равного длине строки.
Я хочу, чтобы строки длиной 6-10. для каждой строки вам нужно запустить этот фрагмент кода
i = rand (6,10) str = ""; while(i--) { num = rand (97,97+25); c = chr(num); str = str.c; }