Генератор случайной строки(паролей)

SSFN

Новичок
Здравствуйте!
Вот написал функцию генератора:
---------------------------------------------------------------------------------------------------------------------------------------
function gen($leight){
$str = "qwertyuiopasdfghjklzxcvbnm123456789";
for($i=0; $i<$leight; $i++){$xx=substr($str, mt_rand(0, strlen($str)), 1);$x="$x$xx";}
$lg = strlen($x);
if($lg != $leight){gen($leight);}
else {return $x;}}

$m = gen(10);
echo $m;
---------------------------------------------------------------------------------------------------------------------------------------
Вроде бы всё понятно... Задаем длину,функция выбирает случайный символ из строки($str) и записывает его в переменную $xx, а переменная $x создает строку из отдельных символов $xx. Затем проверяет длину,и если она не соответствует заданной - повторяет процедуру создание строки $x.
Сто раз проверил!Не могу понять в чем ошибка... Скрипт то генерирует строку и выводит,все без ошибок... то
ничего не выводит(пустая строка)!
В чем проблема?
 

rj45

Новичок
Рекурсия? ...где то слышал что при вызове функции ничего хорошего с расходом памяти не происходит

PHP:
<?php

function gen($leight){
	$x = '';

	$str = "qwertyuiopasdfghjklzxcvbnm123456789";

	for($i=0; $i<$leight; $i++){
		$x .= substr($str, mt_rand(0, strlen($str)-1), 1);
	}

	return $x;
}


for ($i =0; $i < 10000; $i++)
{
	echo $i. ' ' .gen(10).'<br/>';
}

?>
10000 не одного пустого вывода.
 
  • Like
Реакции: SSFN

С.

Продвинутый новичок
Вставь в цикл в конце
PHP:
echo "($i,$xx)"
Это называется отладка
 
  • Like
Реакции: SSFN

SSFN

Новичок
Рекурсия? ...где то слышал что при вызове функции ничего хорошего с расходом памяти не происходит

PHP:
<?php

function gen($leight){
	$x = '';

	$str = "qwertyuiopasdfghjklzxcvbnm123456789";

	for($i=0; $i<$leight; $i++){
		$x .= substr($str, mt_rand(0, strlen($str)-1), 1);
	}

	return $x;
}


for ($i =0; $i < 10000; $i++)
{
	echo $i. ' ' .gen(10).'<br/>';
}

?>
10000 не одного пустого вывода.
Спасибо,теперь понял ошибку)
Вставь в цикл в конце
PHP:
echo "($i,$xx)"
Это называется отладка
Спасибо,не знал,что такое есть.
PHP:
substr(md5(uniqid()), 0, 5);
Василий,я знаю про md5... Случайная строка уже потом должна хэшироваться этим алгоритмом.

Просто я сам изучаю php(до этого серьёзно не программировал) и ещё не знаю всех тонкостей.Спасибо большое,что помогли)
 

Фанат

oncle terrible
Команда форума
а вот чего я не могу понять - это почему нужно вызывать свою функцию рекурсивно. По какой причине пароль может не достигнуть требуемой длины?
 

Фанат

oncle terrible
Команда форума
у автора число вариантов, из которых выбирается символ - 36. это плохо, но приемлемо.
у тебя - 16. это недопустимо мало.
 

SSFN

Новичок
а вот чего я не могу понять - это почему нужно вызывать свою функцию рекурсивно. По какой причине пароль может не достигнуть требуемой длины?
В том то и дело,что цикл for, почему-то, не всегда действует по заданному условию... загадка)Сначала я написал всё без функции и $x в итоге генерировалась иногда из 10,а иногда из 9 и даже из 8 символов!Хотя в условии написано $i < 10.Так до конца и не понял,почему так происходило...
openssl_random_pseudo_bytes
чем это лучше mt_random ?
 

fixxxer

К.О.
Партнер клуба
Одну строку написать вместо многабукф. Ну и - для параноиков - качеством генератора псевдослучайных чисел.
 
Сверху