Want to protect your cyber security and still get fast solutions? Ask a secure question today.Go Premium

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

unique random number generation

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
a0k0a7
Asked:
a0k0a7
  • 2
2 Solutions
 
thaluengCommented:
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
 
dsmileCommented:
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 />';
}
?>

Open in new window

0
 
a0k0a7Author Commented:
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
 
thaluengCommented:
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

Free Tool: Site Down Detector

Helpful to verify reports of your own downtime, or to double check a downed website you are trying to access.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

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