Задать вопрос

Как сделать генерацию случайных символов?

Привет. Как сделать генерацию случайных символов на php? Именно и цифр и маленьких букв. Максимальная длина 17. Находил в инете, но слишком большие какие-то реализации.
  • Вопрос задан
  • 5763 просмотра
Подписаться 6 Оценить Комментировать
Решения вопроса 1
Sander_Li
@Sander_Li
Backend developer
function getString($count = 17){
    $result = '';
    $array = array_merge(range('a','z'), range('0','9'));
    for($i = 0; $i < $count; $i++){
        	    $result .= $array[mt_rand(0, 35)];
    }
 return $result;
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
Satanpit
@Satanpit
Front-end developer
То что использую я, ненужное можете удалить:
function generate($count, $type = 'num') {
		switch ($type){
			case 'num':
				$symbols = '0123456789';
			break;
			case 'low':
				$symbols = 'abcdefghijklmnopqrstuvwxyz';
			break;
			case 'up':
				$symbols = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
			break;
			default:
				$symbols = 'abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
			break;
		}
		
        for($i = 0; $i < $count; $i++)
        	$string .= $symbols{mt_rand(0, strlen($symbols)-1)};
        
        return $string;
	}
Ответ написан
valerium
@valerium
Изобретая велосипед
Если эти 17 случайных символов не участвуют в криптографии, то почему бы не взять хэш от текущих даты-времени, и откусить от него 17 символов?

function getSymbols() {
    return strtolower(substr(hash('gost', date('r')), 0, 17));
}

Если получать эти символы нужно чаще, чем раз в секунду, то придётся использовать класс DateTime, т. к. функция date() не работает с миллисекундами.
Ответ написан
hell0w0rd
@hell0w0rd
Просто разработчик
function getRandString($length, $alphabet = '1234567890qwertyuiopasdfghjklzxcvbnm')
{
    $alphabet = str_repeat($alphabet, (int)($length / mb_strlen($alphabet)) + 1);
    return mb_substr(str_shuffle($alphabet), 0, $length);
}

Я бы так делал. Но все зависит от задачи. Если результат участвует в криптографии - лучше взять что-то проверенное
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы