[PHP] 12 Stellige, verschiedene Zufallszahlen generieren

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Antworten
FighterBC
Mitglied
Beiträge: 83
Registriert: 09.10.2003 18:21
Wohnort: BC

[PHP] 12 Stellige, verschiedene Zufallszahlen generieren

Beitrag von FighterBC »

Hallo,
ich würde gerne 1000 12-Stellige Zufallszahlen mit PHP generieren lassen und auf einer Seite alle untereinander ausgeben.
Allerdings will ich auf keinen Fall das mehrfach die selbe Zahl erscheint. Sondern nur 1x!
Wie funktioniert das? Wäre nett wenn mir das jemand machen könnte und hier posten!

Danke schon im Vorraus!

Das generieren hab ich schon, nur ist leider nicht sicher das keine mehr als 1x vorkommt.

Code: Alles auswählen

<?
$anzahl = 1;
while($anzahl < 1001){
$stellen = 1;
while($stellen < 13){
$zufall = rand(1,9);
echo $zufall;
$stellen ++;
}
echo "<br>";
$anzahl ++;
}
?>
fanrpg
Mitglied
Beiträge: 2909
Registriert: 13.12.2004 22:41

Beitrag von fanrpg »

Code: Alles auswählen

<?php
$i = 1;
$zufallszahlen = array();
while( $i <= 1000 )
{
	$zufall1 = rand(1, 9);
	$zufall2 = rand(1, 9);
	$zufall3 = rand(1, 9);
	$zufall4 = rand(1, 9);
	$zufall5 = rand(1, 9);
	$zufall6 = rand(1, 9);
	$zufall7 = rand(1, 9);
	$zufall8 = rand(1, 9);
	$zufall9 = rand(1, 9);
	$zufall10 = rand(1, 9);	
	$zufall11 = rand(1, 9);
	$zufall12 = rand(1, 9);			
	$zufallszahl = $zufall1.$zufall2.$zufall3.$zufall4.$zufall5.$zufall6.$zufall7.$zufall8.$zufall9.$zufall10.$zufall11.$zufall12;
	if( !in_array($zufallszahl, $zufallszahlen) )	
	{
		$zufallszahlen[$i] = $zufallszahl;
		$i++;
	}
}

while( list($id, $zahl) = each($zufallszahlen) )
{
	echo $id." : ".$zahl."<br />";
}
?>		
So würde ich das machen..
FighterBC
Mitglied
Beiträge: 83
Registriert: 09.10.2003 18:21
Wohnort: BC

Beitrag von FighterBC »

Ich danke dir vielmals für deine Arbeit :wink:

Nur nochmal die Rückfrage zur Sicherheit...
Ist bei deiner Möglichkeit 100% ausgeschlossen das jede Zahl nicht mehr als 1x vorkommt???
fanrpg
Mitglied
Beiträge: 2909
Registriert: 13.12.2004 22:41

Beitrag von fanrpg »

Ja zu 99,9% anders könnts nur Fehler in PHP sein.
Duckster
Mitglied
Beiträge: 4
Registriert: 14.03.2006 11:29

Beitrag von Duckster »

Tach - ihr macht da ja was.

Ich dachte ich schreibe mal schnell einen passenden Zufallszahlengenerator.
Aber merkwürdigerweise erscheinen - trotz Rahmenbedingung - auch
negierte Ergebnisse und die Zeichenlänge entspricht nicht den Vorgaben.

Guck doch mal ob du deinen Code nicht etwas in diese Richtung angleichen magst.

Code: Alles auswählen

<?php
srand((double)microtime()*12345);

/* Fehlerhafte Ergebnisse bei zu grossen ints? Scheint so.
 * Lösung: 12 Stellen einzeln ermitteln.
 */
//$RandMin=100000000000;
//$RandMax=999999999999;

$RandMin=1;
$RandMax=9;

$Zufallszahl=rand($RandMin,$RandMax);

echo strlen($Zufallszahl);
echo(" => ");
echo $Zufallszahl;
?>
ps:
Guckst du
1) http://de2.php.net/srand
2) http://de2.php.net/rand





Viel Glück.
Tschüü.
Maran
Mitglied
Beiträge: 24
Registriert: 14.07.2004 14:52

Beitrag von Maran »

Noch nicht getestet, aber so könnte es gehen:

Code: Alles auswählen

$res = array();

while (count($res) < 1000)
{
   do
   {
      $num = mt_rand(100000000000, 999999999999);
   }
   while (in_array($num, $res));

   $res[] = $num;
}

var_export($res); // Ausgabe
:)
Duckster
Mitglied
Beiträge: 4
Registriert: 14.03.2006 11:29

Beitrag von Duckster »

http://de2.php.net/manual/de/language.types.integer.php
Grenze der Integers ist 31 Bit. Damit 2^31-1 = 2147483647 wäre der max. Wert.

12-stellig muss man sich entsprechend anbinden. Ist ja eigentlich kein Problem mehr, oder?
Maran
Mitglied
Beiträge: 24
Registriert: 14.07.2004 14:52

Beitrag von Maran »

Dann halt so als String-Ausgabe (ebenfalls nicht getestet):

Code: Alles auswählen

$res = array();

while (count($res) < 1000)
{
   $num = '';

   do
   {
      $i = 0;

      while ($i++ < 12)
      {
         $num. = ($num != '') ? (string) mt_rand(0, 9): (string) mt_rand(1, 9);
      }
   }
   while (in_array($num, $res));

   $res[] = $num;
}

var_export($res); // Ausgabe
:)
Antworten

Zurück zu „Coding & Technik“