xif
xif

Reputation: 343

Generate "Unique" 5 digits ID with javascript (99999 combinations) in random order

I want to generate an Unique 5 digits ID + 784 at the begining, the constraint, I can execute the script only one time, and I have to avoid the first 100 numbers so It can't be 00100 and lower. Since I use timestamp and I can execute only my script one time how I can handle this ?

I did this it's maybe dumb but at least I tried.

 ConcatedID();  
 function ConcatedID()
 {
  var uniqID = checkProtectedRange();
  if (checkProtectedRange())
    {
        var BarcodeID = 784 + uniqID;
        return BarcodeID;
    }
 else
        checkProtectedRange();
 }

 function checkProtectedRange()
{
var uniqueID = GenerateUniqueID();
var checkRange = uniqueID.substr(uniqueID.length - 3);
var checkRangeINT = parseInt(checkRange);
if (checkRangeINT <= 100)
        return (false);
else
        return (true);
 }

 function GenerateUniqueID()
{
var lengthID = 5;
var timestamp = + new Date();
var ts = timestamp.toString();
var parts = ts.split("").reverse();
var id = "";
var min  = 0;
var max = parts.length -1;
for (var i = 0; i < lengthID; ++i)
{
    var index = Math.floor(Math.random() * (max - min + 1)) + min;
    id += parts[index];
}
gs.log('Generate ID ' + id);
return id;                     
}    

Upvotes: 0

Views: 3075

Answers (1)

Ouroborus
Ouroborus

Reputation: 16896

Without being able to track previously used IDs, you're left with chance to prevent duplicates. Your shenanigans with Date doesn't really change that. See the birthday problem.

Given that, just follow the most straight-forward method: Generate a random string consisting of five digits.

function GenerateUniqueID() {
  return ('0000'+(Math.random() * (100000 - 101) + 101)|0).slice(-5);
}

Or, if you want just the final integer with constraints applied:

function GenerateUniqueID() {
  return (Math.random() * (78500000 - 78400101) + 78400101)|0;
}

Upvotes: 1

Related Questions