4 stellige Zufallszahlen

Begonnen von lausbub, 19 Dezember 2010, 19:49:25

⏪ vorheriges - nächstes ⏩

0 Mitglieder und 1 Gast betrachten dieses Thema.

lausbub

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.
PHP Version: 5.2.11
MySql Version: 5.0.51a
Server-Version: Apache/2.2.8 (Linux/SUSE)
Pragma 1.12

Olaf / TerraProject

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....


g

Olaf

Kein Support über PN, Mail etc.!
Bitte die Fragen im Forum stellen, nur so helfen die Antworten auch den anderen Usern.
Bitte auch die Boardsuche nicht vergessen, oft ist genau dein Problem schon an anderer Stelle gelöst worden!

lausbub

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.
PHP Version: 5.2.11
MySql Version: 5.0.51a
Server-Version: Apache/2.2.8 (Linux/SUSE)
Pragma 1.12

Olaf / TerraProject

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...
g

Olaf

Kein Support über PN, Mail etc.!
Bitte die Fragen im Forum stellen, nur so helfen die Antworten auch den anderen Usern.
Bitte auch die Boardsuche nicht vergessen, oft ist genau dein Problem schon an anderer Stelle gelöst worden!

lausbub


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
PHP Version: 5.2.11
MySql Version: 5.0.51a
Server-Version: Apache/2.2.8 (Linux/SUSE)
Pragma 1.12

pyr0

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:

  • function CreatePin() erzeugt die Zufallszahl
  • function CheckPin() überprüft ob die Zufallszahl bzw der NEU PIN schon in der DB ist


  • function PIN() wird solange ausgeführt bis ein PIN nicht in der DB vorkommt.


Ich hoffe es paßt so
Kein Support über PN, Mail !
Bitte die Fragen im Forum stellen, nur so helfen die Antworten auch den anderen Usern.
Bitte auch die Boardsuche nicht vergessen, oft ist genau dein Problem schon an anderer Stelle gelöst worden!