Solved

# 8 Unique Numbers

Posted on 2008-06-23
210 Views
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
Question by:hankknight
[X]
###### Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

• Help others & share knowledge
• Earn cash & points

LVL 24

Expert Comment

ID: 21846706
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;
}

?>
``````
0

LVL 24

Assisted Solution

glcummins earned 300 total points
ID: 21846735
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;
}

?>
``````
0

LVL 14

Assisted Solution

agriesser earned 100 total points
ID: 21846818
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;

?>
``````
0

LVL 11

Assisted Solution

spoxox earned 100 total points
ID: 21846981
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++;
}
}
?>
``````
0

LVL 16

Author Comment

ID: 21847104
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);
?>
``````
0

LVL 24

Expert Comment

ID: 21847129
Yes, that will work, and will allow you to start with as large a data set as desired.
0

LVL 16

Accepted Solution

hankknight earned 0 total points
ID: 21847132
Or even better:
``````<?php
echo substr(str_shuffle('0123456789'),-8);
?>
``````
0

## Featured Post

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

### Suggested Solutions

These days socially coordinated efforts have turned into a critical requirement for enterprises.
Many old projects have bad code, but the budget doesn't exist to rewrite the codebase. You can update this code to be safer by introducing contemporary input validation, sanitation, and safer database queries.
Explain concepts important to validation of email addresses with regular expressions. Applies to most languages/tools that uses regular expressions. Consider email address RFCs: Look at HTML5 form input element (with type=email) regex pattern: Tâ€¦
The viewer will learn how to look for a specific file type in a local or remote server directory using PHP.
###### Suggested Courses
Course of the Month3 days, 2 hours left to enroll