Помогите с кодом!

FANTAzeRus

Guest
Помогите с кодом!

Хочется написать функцию, которая составляет строку из N символов заполненную случайтным образом символами A..Z, a..z, 0..9.
типа

function getTextLine()
{
$count = 10;
$line = ....
return($line);
}

Помогите плиз кто не особо занят! :)
 

XtremallyPurpur

Новичок
Можно так:
PHP:
function RandString($length=16, $list="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"){
 mt_srand((double)microtime()*1000000);
	$newstring="";

	if($length>0){
          while(strlen($newstring)<$length){
			$newstring.=$list[mt_rand(0, strlen($list)-1)];
		}
	}
	return $newstring;
	}
 

гоша

Guest
вместо

while(strlen($newstring)<$length)

лучше просто

while($length--)
 

Линк

Guest
[убрал свою глупость. удалите пост PLZ]
 

XtremallyPurpur

Новичок
гоша
тогда уж лучше так:
PHP:
  $len_list = strlen($list)-1;
 while(0<$length--){
            $newstring.=$list[mt_rand(0, $len_list)];
        }
 

XtremallyPurpur

Новичок
Crazy

а такое написание не считается плохим стилем? (неявное преобразование типов)
 

Crazy

Developer
Автор оригинала: XtremallyPurpur
а такое написание не считается плохим стилем? (неявное преобразование типов)
А ты всегда явно типы преобразуешь? Типа такого:

PHP:
$a = 1;
echo (string)$a;
:)
 

XtremallyPurpur

Новичок
Frol
Crazy
:) нет до такого не дохожу.

Но мне мой while(0<$length--) больше нравится, он строже выглядит.
 

XtremallyPurpur

Новичок
Линк

а в чем проблема, чего смешного?

Цитирую кого-то, не знаю к несчастью кого:

При сравнении всегда ставьте константы слева. Например:
PHP:
if ( 6 == $errorNum ) ...
Первая причина такому поведению - это то, что парсер найдёт ошибку, если вы поставите только один знак равенства ('=') вместо двух. Вторая причина - при чтении кода вы находите нужное вам значение сразу в начале условия, а не ищите где-то в конце. К такому формату привыкаешь не сразу, но этот стиль действительно полезен.
 

Линк

Guest
ни в чем
просто если ратовать за красоту кода
то уж лучше while($length-->0)

впрочем без разницы)
 

Линк

Guest
Взял свой стааааааарый исходник
PHP:
<?
/*
Функция генерации паролей. 
*/
/////-Настройка--//
define("min_",10);//Минимальная длина пароля
define("max_",25);//Максимальная длина пароля
////-Конец-настройки-//


function passgen()
{
	$passlen=rand(min_,max_);
	$pass="";
	for ($i=0;$i<$passlen;$i++)
	{
		//65 90
		switch (rand(1,3))
		{
	case '1': {$sim=chr(rand(97,122));break;}
	case '2': {$sim=chr(rand(48,57));break;}
	case '3': {$sim=chr(rand(65,90));break;}
		}
		$pass.=$sim;

	}
	return $pass;
}
?>
 

Silex

unitecsys
PHP:
function generate_password($length){
	srand ((float) microtime() * 10000000);
	$input = array (1,2,3,4,5,6,7,8,9,0,q,w,e,r,t,y,u,i,o,p,a,s,d,f,g,h,j,k,l,z,x,c,v,b,n,m);
	$pass = '';
	for($j=0;$j<$length;$j++){
		$rand_keys = array_rand ($input);
		$pass .= $input[$rand_keys];
	}
	return $pass;
}
 

Линк

Guest
silex, а у меня красивее:)

и srand не надо
Мануал говорит: As of PHP 4.2.0, there is no need to seed the random number generator with srand() or mt_srand() as this is now done automatically.
 

Silex

unitecsys
Ну я, конечно, мог бы отмазываться насчет совместимости с более ранними версиями, но не буду - сам виноват, нужно мануалы читать внимательнее ,) Переменную $rand_keys тоже можно опустить.

Насчет красивее - черт его знает, не думаю... В твоем случае нужно еще и коды символов знать, а в моем все нагляднее + я могу по религиозным соображениям любые символы добавить/запретить либо увеличить частоту встречаемости простой правкой массива. Насчет быстрее - два rand'a против одного array_rand() на один генерируемый символ, имхо, должны быть медленнее.
 
Сверху