CodeMaker
jaquel
- php
Hi,
function make_seed() {
list($usec, $sec) = explode(' ', microtime());
return (float) $sec + ((float) $usec * 100000);
}
function createcode($anz) {
mt_srand(make_seed());
$pass = "";
$zeichen = "abcdefghijklmnopqrstuvwxyz".
"ABCDEFGHIJKLMNOPQRSTUVWXYZ".
# "0123456789öäüÖÄÜ";
"0123456789";
for($i=0; $i < $anz; $i++) $pass .= $zeichen[mt_rand(0,strlen($zeichen))];
return $pass;
}
Ein toller Codemaker - jedoch mit einem Bug!
Ich übergeb ja die länge des Codes ($anz) - so kann ich 2 stellige Codes erzeugen der auch 10 - wie auch immer.
doch genau da liegt das problem. manchmal erzeugt er einen code der genau ein zeichen zu kurz ist wie ich möchte.. wo liegt denn der fehler?
jaquel
Hi,
ich hab mich jetzt nicht genau mit deinem Code befasst...
aber versuchs mal mit for($i=0; $i <= $anz; $i++)
vielleicht tuts ja dann
Gruß Mika
Hallo!
aber versuchs mal mit for($i=0; $i <= $anz; $i++)
vielleicht tuts ja dann
Blödsinn. Wenn du $n Durchläufe haben willst, dann fang bei 0 an und füge als Abbruchbedingung $i<$n ein. Das passt schon.
Wenn weniger Durchläufe durchgeführt werden, dann liegt woanders der Hund begraben.
mfg
frafu
echo $begrüßung;
Ich übergeb ja die länge des Codes ($anz) - so kann ich 2 stellige Codes erzeugen der auch 10 - wie auch immer.
doch genau da liegt das problem. manchmal erzeugt er einen code der genau ein zeichen zu kurz ist wie ich möchte.. wo liegt denn der fehler?
Bitte ermittle zunächst, welche Situationen das sind, indem du die Ergebnisse ausgibst, die die Funktion mt_rand() in diesem Fall in den einzelnen Durchläufen der Schleife liefert. Ebenso wäre interessant, welche Zeichen dann aus $zeichen genommen werden und wie $pass am Ende aussieht. Verwende für die Ausgabe am besten die Funktion var_dump().
echo "$verabschiedung $name";
Ahoi jaquel,
for($i=0; $i < $anz; $i++)
while(strlen($pass)<$anz)
MfG
Moje,
for($i=0; $i < $anz; $i++)
while(strlen($pass)<$anz)
Ja das ist gut, damit erhalte ich auf jeden Fall einen Code der so lange ist wie er sein sollte, aber das Problem bzw. deren Ursache ist ja immernoch im code, oder!? aber ist ja auch wurscht! Hauptsache es geht ;)
jaquel
Ahoi jaquel,
habs mir nochmal angeschaut:
$zeichen[mt_rand(0,strlen($zeichen))];
hier könnte der hund begraben gelegen haben denn
mt_rand ( [int $min, int $max] )
ein string der z.B. 24 Zeichen enthält geht von 0 bis 23.
das 24te Zeichen ist dann wohl nix '' => zu kurze wörter.
MfG