Генераторы случайных строк чаще всего требуются при создании паролей, уникальных кодов дисконтных карт, одноразовых кодов доступа и т.д
Ниже функция с примеров вызова, для генерации 500 уникальных кодов из 8-и символов
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
/** * Основа для создания псевдо случайно строки */ $permitted_chars = '0123456789АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЫЬЭЮЯ'; /** * Генератор псевдо случайной строки * Исключает появление в строке, только цифр и только букв * @param string $input основа для формирования строки * @param int $strength длина выходной строки * @return string */ function generate_code_string( string $input, int $strength = 16):string { $input_length = strlen($input); $random_string = ''; for($i = 0; $i < $strength; $i++) { $random_character = $input[mt_rand(0, $input_length - 1)]; $random_string .= $random_character; } /** * Если только цифры */ if(ctype_digit($random_string)===true){ return generate_code_string($input,$strength); } /** * Если только буквы из текущей локали */ if(ctype_alpha($random_string)===true) { return generate_code_string($input,$strength); } return $random_string; } /** * Пример генерации 500-строк с длиной 8-ь символов * и вывод их на экран */ for($i=0;$i<500;$i++) { $new=generate_code_string($permitted_chars, 8); echo $new.'<br>'; } |
Пояснение:
- Для работы необходимо задать основу для создания строки. В основу можно включить цифры, буквы. Буквы русского и английского алфавита, строчные и прописные. Всё по отдельности и сразу
- Функция не допускает генерации только цифирной или только буквенной комбинации. (это надо учитывать при задании основы генерации)
- Для запуска функции генерации случайных кодов(строк) так же можно указать длину выходной строки. Чем длиннее строка, тем меньше вероятность появления дубля строки на сколь угодно длинном промежутке повторений функции в цикле запусков.
Для mt_rand() произведено исправление бага смещения по модулю. Это означает, что последовательности сгенерированные с конкретным начальным значением могут отличаться от сгенерированных в PHP 7.1 для 64-битных машин. Функция mt_rand() была обновлена и теперь использует корректную версию генератора случайных чисел на основе Вихря Мерсенна.