$k="bcdfghjklmnpqrstvwxzBCDFGHJKLMNPQRSTVWXZ1"; // Konsonanten
$zufall=$k[mt_rand(0, count($k)-1)];
Aber ich bekomme in jedem Durchlauf 'b' geliefert. Ich habe mir etwas
zufälligere Ergebnisse erhofft.
Was mache ich falsch?
Martin
count() ist für Arrays oder Objekte. Du suchst strlen().
KP
Moegliche Antworten:
a) es kommt _zufaellig_ immer "b" ;-)
b) einen String mag man als Array von Chars betrachten, praktischerweise
wuerde ich aber strlen() statt count() nehmen und substr() statt $k[..]
Also: $zufall=substr($k,mt_rand(0, strlen($k)-1), 1);
:-)
Oliver
P.S. Bei PHP vor 4.2 haette ich sonst noch auf srand() hingewiesen.
> count() ist für Arrays oder Objekte. Du suchst strlen().
Dieser Fehler ist bei mir unausrottbar. *grrr*
@Oliver:
$string[$i] geht durchaus. Aber substr natürlich auch, wenngleich ohne
irgend einen Vorteil und schon gar nicht hinsichtlich der Lesbarkeit.
Danke!
Martin
> Moegliche Antworten:
>
> a) es kommt _zufaellig_ immer "b" ;-)
:-)
> praktischerweise
> wuerde ich aber strlen() statt count() nehmen
Nicht nur praktischer Weise, es geht nicht mit count().
> und substr() statt $k[..]
Das hingegen ist Quatsch. Die Zeichen der Zeichenkette liegen ganz klar
im ASCII-Bereich da ist $k[$index] absolut der performantere Weg und der
Zugriff im Arrayformat hat dann auch keinerlei Nachteil.
> Also: $zufall=substr($k,mt_rand(0, strlen($k)-1), 1);
$zufall = $k[\mt_rand(0, \strlen($k) - 1)];
Gruß, Ethan
Eventuell interessiert dich der Codeschnippsel hier. Ich hab den vor
Jahrtausenden mal irgendwo gefunden. Der kaputte dokumentations Kopf
zeigt das der code bei mir nicht produktiv, aber dennoch interessant ist.
/* $PwdType can be one of these:
test .. .. .. always returns the same password = "test"
any .. .. .. returns a random password, which can contain
strange characters
alphanum . .. returns a random password containing
alphanumerics only
standard . .. same as alphanum, but not including l10O (lower
L, one, zero, upper O)
*/
function getRandomPassword($PwdLength=8, $PwdType='standard')
{
$Ranges='';
if('test'==$PwdType) return 'test';
elseif('standard'==$PwdType)
$Ranges='65-78,80-90,97-107,109-122,50-57';
elseif('alphanum'==$PwdType) $Ranges='65-90,97-122,48-57';
elseif('any'==$PwdType) $Ranges='40-59,61-91,93-126';
if($Ranges<>'')
{
$Range=explode(',',$Ranges);
$NumRanges=count($Range);
$pr_bits='';
if( ini_get('safe_mode') ){
mt_srand(time());
}else{
$ran_string=shell_exec("head -c 4 /dev/{$u}random");
$random=ord(substr($ran_string,0,1))<<24 |
ord(substr($ran_string,1,1))<<16 |
ord(substr($ran_string,2,1))<<8 |
ord(substr($ran_string,3,1));
mt_srand($random);
}
$p='';
for ($i = 1; $i <= $PwdLength; $i++)
{
$r=mt_rand(0,$NumRanges-1);
list($min,$max)=explode('-',$Range[$r]);
$p.=chr(mt_rand($min,$max));
}
return $p;
}
}