Solved

unique random number generation

Posted on 2010-11-21
Medium Priority
651 Views
I'm looking for a php script that generates unique random numbers may be up to 16 digits then insert them in a table.

0
Question by:a0k0a7
[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
• 2

LVL 1

Accepted Solution

thalueng earned 1000 total points
ID: 34185208
Not sure I fully understand your requirement. The following code generates a random number "\$rand" and inserts it into table "rand_table" together with an "\$id". If the \$id already exists in the table, then the previous random number is replaced with the new one. This example works as is for Joomla 1.5, for any other context just replace the last 2 lines of code with your query function.

\$rand = mt_rand();
\$query =      'INSERT INTO rand_table (id, rand_field)'.
' VALUES ('.\$id.','.\$rand.
') ON DUPLICATE KEY UPDATE uid='.\$uid.',last_rand='.\$rand;
// the following 2 lines are Joomla specific
\$this->_db->setQuery(\$query);
return \$this->_db->query();
0

LVL 13

Assisted Solution

dsmile earned 1000 total points
ID: 34185234
Here's the script

1. a function to generate 16 digits number uniquely & randomly
2. sample code to insert / select from DB
``````<?php
/*
* create a random number uniquely base on input
*/
function createNumber(\$lastNumber) {
\$number = rand(0, 99999999) . rand(0, 99999999);
while (\$number == \$lastNumber) {
\$number = rand(0, 99999999) . rand(0, 99999999);
}

return \$number;
}

session_start();
if (!isset(\$_SESSION['number'])) {
\$_SESSION['number'] = 0;
}

\$number = createNumber(\$_SESSION['number']);
\$_SESSION['number'] = \$number;

//init
\$host = 'localhost'; \$db_user = 'root'; \$db_password = '';
\$database = 'test';
\$connect = mysql_connect ( \$host, \$db_user, \$db_password );
mysql_select_db ( \$database );

//insert new number
if (\$number) {
\$result = mysql_query("INSERT INTO test_r (number) VALUES ('". \$number ."')");
if (!\$result) {
echo 'Could not run query: ' . mysql_error();
exit;
}
}

//list generated numbers
\$result = mysql_query('SELECT number FROM test_r');
if (!\$result) {
echo 'Could not run query: ' . mysql_error();
exit;
}

echo 'Generated Numbers: <br />';
while (\$row = mysql_fetch_array(\$result)) {
echo \$row['number'] .'<br />';
}
?>
``````
0

LVL 8

Author Comment

ID: 34185568
Thanks a lot for the suggestion really help me figure out a couple things, what I would need to do if I want to check if my random number is in a specific table before making the insert.

If the random number is in the table then I would like to keep generating a random number until the number is not available in the table so i can do the insert.

@Dsmile, @thalueng I appreciate your help.

0

LVL 1

Expert Comment

ID: 34186178
Make rand_field a primary key and change the query to \$query = 'INSERT INTO rand_table (rand_field) VALUES ('.\$rand.')';

If the value exists in the table, the query will abort with an error. Loop through several mt_rand() and queries until it returns without error.

BTW: use mt_rand(), not rand(), which is faster and better randomizer.
0

Featured Post

Question has a verified solution.

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

3 proven steps to speed up Magento powered sites. The article focus is on optimizing time to first byte (TTFB), full page caching and configuring server for optimal performance.
Originally, this post was published on Monitis Blog, you can check it here . In business circles, we sometimes hear that today is the “age of the customer.” And so it is. Thanks to the enormous advances over the past few years in consumer techno…
The viewer will learn how to dynamically set the form action using jQuery.
In this video, Percona Solution Engineer Rick Golba discuss how (and why) you implement high availability in a database environment. To discuss how Percona Consulting can help with your design and architecture needs for your database and infrastr…
Suggested Courses
Course of the Month14 days, 8 hours left to enroll