Igor Timoshenko
Igor Timoshenko

Reputation: 1011

How to generate unique numeric value with fixed length from given data in PHP?

How to generate unique numeric value with fixed length from given data in PHP? For instance, I can have a string that contains numbers and characters and I need to generate unique numeric value with length 6. Thanks!

Upvotes: 0

Views: 676

Answers (2)

Sergi Juanola
Sergi Juanola

Reputation: 6647

You won't be able to generate a unique numeric value out of an input with any algorithm. That's the problem of converting an input into a pseudorandom output. If you have an input string of 20 characters and an output of only 6, there will be repeated results, because:

input of 20 characters (assuming 58 alphanumerical possibilities):

58^20 = 1.8559226468222606056912232424512e+35 possibilities

output of 6 characters (assuming 10 numerical possibilities):

10^6 = 1000000 possibilities

So, to sum up, you won't be able to generate a unique number out of a string. Your best chances are to use a hashing function like md5 or sha1. They are alphanumerical but you can always convert them into numbers. However, once you crop them to, let's say, 6 digits, their chances to be repeated increase a lot.

Upvotes: 2

Shane Fright
Shane Fright

Reputation: 385

It is impossible to generate a completely unique value given an arbitrary value with a limit on the number of characters unfortunately. There are an infinite number of possible values, while there are only 999999 possible values in a numeric value of length 6.

In PHP however you can do the following:

$list_of_numeric_values = array();

foreach ($list_of_given_values as $value)
{
     if (!in_array($value, $list_of_numeric_values))
         $list_of_numeric_values[] = $value;
}

After this is complete, the array then will have a unique key for each possible value you can use.

If you dont need to calculate these all at the same time you can follow a similar algorithm where instead of just "searching" the array using PHP perhaps its a SELECT on a MySQL table to see if the entry currently exists, and using the auto increment of the primary key to get your value.

Upvotes: 0

Related Questions