pragmaMx Support Forum

pragmaMx => Coder und Bastlerecke => Thema gestartet von: lausbub in 19 Dezember 2010, 19:49:25

Titel: 4 stellige Zufallszahlen
Beitrag von: lausbub in 19 Dezember 2010, 19:49:25
Hallo,
Ich hoffe ihr könnt mir weiter helfen.
Finde leider nicht das richtige bei google.

Und zwar möchte ich, das mir 10 zahlen a 4 stellen per zufall erstellt werden.

Diese sollen in der datenbank in _pins gespeichert werden.

Sollten da noch nummern gespeichert sein. Müssen die neuen anders lauten.

Es soll eine Art Pin-module werden.

Hat jemand zufällig ein tutorial mal gesehen oder könnte mir dabei helfen?

Vielen Dank im vorraus.
Titel: Re:4 stellige Zufallszahlen
Beitrag von: Olaf / TerraProject in 19 Dezember 2010, 20:02:53
erstmal, mit der Beschränkung auf eine 4-stellige Zahl schränkst du prinzipiell erstmal die Möglichkeiten deines Moduls stark ein... aber das nur am Rande...

ein Lösung wäre, die Startbedingung für rand, also srand($x), immer gleich zu lassen ( $X = hardcodieren), und auch immer vor dem Erzeugen einer Zufallszahl aufzurufen.

dann rand mit den parametern  rand(0,9999) aufrufen, dann zu einem 4-stelligen String mit ggf. vorangestelten nullen konvertieren.

um sicherzustellen, dass du immer eine neue Zahl erzeugst, bleibt dir wahrscheinlich nichts anderes übrig, als die Anzahl der bereits vorhandenen Zahlen zu ermitteln und dann diese Anzahl + 1 Zufallszahlen in einer Schleife noch einmal zu durchlaufen. Die letzte Zahl ist dann deine neueste und nicht gleich der vorhergehenden Zahlen. Vor der Schleife müsste dann dein srand($x) stehen...

m.E. ist aber eine Erzeugung einer eindeutigen ID besser, sicherer und schneller, auch wenn dieses keine Zahlen sind....


Titel: Re:4 stellige Zufallszahlen
Beitrag von: lausbub in 19 Dezember 2010, 20:14:14
hallo, mit dem mt_rand hab ich gelesen, das es gerade beim durchlaufen von schleifen zu problemen kommt und öfters die gleiche zahl erzeugt wird.
Titel: Re:4 stellige Zufallszahlen
Beitrag von: Olaf / TerraProject in 19 Dezember 2010, 20:34:46
Warum brauchst du unbedingt ne 4-stellige Zahl ?

kannst auch beim ersten Aufruf ein Array mit 10.000 Einträgen von o bis 9999 erzeigen, dann durch spätere Aufrufe ein zufälliges Element rauslesen und dieses dann aus dem Array entfernen. Nachteil: du musst das Array irgendwie speichern...
Titel: Re:4 stellige Zufallszahlen
Beitrag von: lausbub in 19 Dezember 2010, 22:42:59

for($i = 0; $i < 10; $i++)
{
  $Zufallszahl = rand(1000, 9999);
  echo $Zufallszahl.", ";


}



meine 4 stelligen zahlen werden erstellt, nur blick ich nicht so ganz wie ich verhindere, das bereits gespeicherte zahlen und doppelte pins verhindere
Titel: Re:4 stellige Zufallszahlen
Beitrag von: pyr0 in 20 Dezember 2010, 12:20:26
Probier es mal hiermit


<?php

//setzten von Vars
$testpin_vorhanden='';

// Erstelle Zufallszahl
function CreatePin(){
$Zufallszahl rand(10009999);
#$Zufallszahl = 1234;
return $Zufallszahl;
}



// Prüfe ob Pin vorhanden ist
function CheckPin(){
global $prefix,$Zufallszahl;


$testz CreatePin();

$result sql_query("SELECT count(pin) FROM " $prefix "_pins where pin='$testz'");
list($testpin ) = sql_fetch_row($result);
if($testpin >= "1")
  {
  
//setzte Abruch Var
  
$testpin_vorhanden "1";
  
return $testpin_vorhanden;
  }
  
}


function 
PIN(){
if(
CheckPin() == "1")
{
// Erneut Zufallszahl erzeugen und testen
echo "ist gleich";
$testz CreatePin();
if(CheckPin() == "1")
{
  PIN();
}
}
else{
// In DB schreiben 
echo "nicht gleich";
}

}


PIN();
?>




Also das ganze funktioniert so:


Ich hoffe es paßt so