Как я могу генерировать (псевдо) случайную буквенно-цифровую строку, например: «d79jd8c» в PHP?
Сначала создайте строку со всеми вашими возможными символами:
$characters = 'abcdefghijklmnopqrstuvwxyz0123456789';
Вы также можете использовать range (), чтобы сделать это быстрее.
Затем в цикле выберите случайное число и используйте его как индекс строки $characters
чтобы получить случайный символ, и добавьте его в строку:
$string = ''; $max = strlen($characters) - 1; for ($i = 0; $i < $random_string_length; $i++) { $string .= $characters[mt_rand(0, $max)]; }
$random_string_length
– длина случайной строки.
Мне нравится эта функция для работы
function randomKey($length) { $pool = array_merge(range(0,9), range('a', 'z'),range('A', 'Z')); for($i=0; $i < $length; $i++) { $key .= $pool[mt_rand(0, count($pool) - 1)]; } return $key; } echo randomKey(20);
Я знаю, что это старая должность, но я бы хотел внести свой вклад в создание класса, основанного на ответе Джереми Рутена, и улучшился с предложениями в комментариях:
class RandomString { private static $characters = 'abcdefghijklmnopqrstuvwxyz0123456789'; private static $string; private static $length = 8; //default random string length public static function generate($length = null) { if($length){ self::$length = $length; } $characters_length = strlen(self::$characters) - 1; for ($i = 0; $i < self::$length; $i++) { self::$string .= self::$characters[mt_rand(0, $characters_length)]; } return self::$string; } }
Создайте криптографически сильную, случайную (потенциально) 8- значную строку, используя функцию openssl_random_pseudo_bytes :
echo bin2hex(openssl_random_pseudo_bytes(4));
Процедурный способ:
function randomString($length) { return bin2hex(openssl_random_pseudo_bytes($length)); }
Используйте таблицу ASCII для выбора диапазона букв, где: $ range_start, $ range_end – значение из десятичного столбца таблицы ASCII.
Я нахожу, что этот метод лучше по сравнению с описанным методом, где диапазон символов определен конкретно в другой строке.
// range is numbers (48) through capital and lower case letters (122) $range_start = 48; $range_end = 122; $random_string = ""; $random_string_length = 10; for ($i = 0; $i < $random_string_length; $i++) { $ascii_no = round( mt_rand( $range_start , $range_end ) ); // generates a number within the range // finds the character represented by $ascii_no and adds it to the random string // study **chr** function for a better understanding $random_string .= chr( $ascii_no ); } echo $random_string;
Узнать больше:
Возможно, я пропустил что-то здесь, но вот способ использования функции uniqid () .
function generateRandomString($length = 10) { $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; $charactersLength = strlen($characters); $randomString = ''; for ($i = 0; $i < $length; $i++) { $randomString .= $characters[rand(0, $charactersLength - 1)]; } return $randomString; } echo generateRandomString();
Вы можете использовать следующий код, скопированный из этой статьи . Он похож на существующие функции, за исключением того, что вы можете принудительно использовать специальный символ:
function random_string() { // 8 characters: 7 lower-case alphabets and 1 digit $character_set_array = array(); $character_set_array[] = array('count' => 7, 'characters' => 'abcdefghijklmnopqrstuvwxyz'); $character_set_array[] = array('count' => 1, 'characters' => '0123456789'); $temp_array = array(); foreach ($character_set_array as $character_set) { for ($i = 0; $i < $character_set['count']; $i++) { $temp_array[] = $character_set['characters'][rand(0, strlen($character_set['characters']) - 1)]; } } shuffle($temp_array); return implode('', $temp_array); }
Я сделал следующую быструю функцию, чтобы просто поиграть с функцией range()
. Это может когда-нибудь помочь кому-то.
Function pseudostring($length = 50) { // Generate arrays with characters and numbers $lowerAlpha = range('a', 'z'); $upperAlpha = range('A', 'Z'); $numeric = range('0', '9'); // Merge the arrays $workArray = array_merge($numeric, array_merge($lowerAlpha, $upperAlpha)); $returnString = ""; // Add random characters from the created array to a string for ($i = 0; $i < $length; $i++) { $character = $workArray[rand(0, 61)]; $returnString .= $character; } return $returnString; }
Однострочное решение:
echo substr( str_shuffle( str_repeat( 'abcdefghijklmnopqrstuvwxyz0123456789', 10 ) ), 0, 7 );
Вы можете изменить параметр substr, чтобы задать другую длину для вашей строки.
Это то, что я использую:
$cryptoStrong = true; // can be false $length = 16; // Any length you want $bytes = openssl_random_pseudo_bytes($length, $cryptoStrong); $randomString = bin2hex($bytes);
Здесь вы можете увидеть Документы для openssl_random_pseudo_bytes и Docs для bin2hex здесь
Ответ Джереми велик. Если, как и я, вы не знаете, как реализовать range (), вы можете увидеть мою версию с помощью range ().
<?php $character_array = array_merge(range('a', 'z'), range(0, 9)); $string = ""; for($i = 0; $i < 6; $i++) { $string .= $character_array[rand(0, (count($character_array) - 1))]; } echo $string; ?>
Это делает то же самое, что и у Джереми, но использует объединенные массивы, где он использует строку, и использует count (), где использует strlen ().
1 строка:
$FROM = 0; $TO = 'zzzz'; $code = base_convert(rand( $FROM ,base_convert( $TO , 36,10)),10,36); echo $code;