Go Premium for a chance to win a PS4. Enter to Win

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 225
  • Last Modified:

8 Unique Numbers

Hello,

I need to randomly generate 8 UNIQUE random numbers.

No number may be used more than once.

So this number is good:
    53962471

This number is NOT because some numbers are duplicated:
    11223344


What is the shortest/simplest way to do this?
0
hankknight
Asked:
hankknight
4 Solutions
 
glcumminsCommented:
Not sure that this method is the simplest, but it will definitely work and is extensible in case your requirements change:


<?php
 
$uniqueNumbers = 8;
$highestValue = 9;
$lowestValue = 1;
 
$arrGeneratedNumbers = array();
 
for ($i = 0; $i<$uniqueNumbers; $i++)
{
	$foundUnique = false;
	
	while (!$foundUnique)
	{
		$newNumber = rand($lowestValue, $highestValue);
		if (!in_array($newNumber, $arrGeneratedNumbers))
		{
			$arrGeneratedNumbers[] = $newNumber;
			$foundUnique = true;
		}
	}
}
 
foreach ($arrGeneratedNumbers as $number)
{
	echo $number;
}
 
?>

Open in new window

0
 
glcumminsCommented:
Here is a simpler method, but it limits you to the eight numbers that you enter into the array:
<?php
 
$arrNumbers = array(1,2,3,4,5,6,7,8);
 
shuffle($arrNumbers);
 
foreach ($arrNumbers as $number)
{
	echo $number;
}
 
?>

Open in new window

0
 
agriesserCommented:
Try this.
<?php
 
$magicnumbers = array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9);
$randomnumber = '';
 
for($i = 0; $i < 8; $i++)
{
  $r = rand(0, 9 - $i);
  $randomnumber .= $magicnumbers[$r];
  unset($magicnumbers[$r]);
  $magicnumbers = array_values($magicnumbers);
}
 
echo $randomnumber;
 
?>

Open in new window

0
Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
spoxoxCommented:
Is there a requirement for the length of the random numbers? Assuming NO
Are all digits 0-9 eligible? Assuming YES
Is zero acceptable? Assuming YES
<?php
$uNums = array();
$digits = array(1,2,3,4,5,6,7,8,9,0);
$req = 8;
$nCount = 0; 
while ($nCount < $req) {
  shuffle($digits); // randomly shuffle array of digits
  $nLen = rand(1,10);  // determine length of next random digit string
  $num = ""; // initialize digit string
  for ($i = 0; $i < $nLen; $i++) { // collect $nLen unique digits
    $num = $num.$digits[$i];
  }
  if (!in_array($num, $uNums)) { // verify digit string/number is not in array
    $uNums[] = $num; // add digit string/number to array
    $nCount++;
  }
}
?>

Open in new window

0
 
hankknightAuthor Commented:
I feel silly answering my own question but the ideas keep getting more complex.

One of your ideas triggered a lightening bolt in my head and I came up with this.

What do you think?
<?php
 $str = '0123456789';
 $shuffled = str_shuffle($str);
 echo substr($shuffled,-8);
?>

Open in new window

0
 
glcumminsCommented:
Yes, that will work, and will allow you to start with as large a data set as desired.
0
 
hankknightAuthor Commented:
Or even better:
<?php
echo substr(str_shuffle('0123456789'),-8);
?>

Open in new window

0

Featured Post

Keep up with what's happening at Experts Exchange!

Sign up to receive Decoded, a new monthly digest with product updates, feature release info, continuing education opportunities, and more.

Tackle projects and never again get stuck behind a technical roadblock.
Join Now