phpjs
Version:
54 lines (49 loc) • 1.64 kB
JavaScript
function uniqid(prefix, more_entropy) {
// discuss at: http://phpjs.org/functions/uniqid/
// original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
// revised by: Kankrelune (http://www.webfaktory.info/)
// note: Uses an internal counter (in php_js global) to avoid collision
// test: skip
// example 1: uniqid();
// returns 1: 'a30285b160c14'
// example 2: uniqid('foo');
// returns 2: 'fooa30285b1cd361'
// example 3: uniqid('bar', true);
// returns 3: 'bara20285b23dfd1.31879087'
if (typeof prefix === 'undefined') {
prefix = '';
}
var retId;
var formatSeed = function(seed, reqWidth) {
seed = parseInt(seed, 10)
.toString(16); // to hex str
if (reqWidth < seed.length) { // so long we split
return seed.slice(seed.length - reqWidth);
}
if (reqWidth > seed.length) { // so short we pad
return Array(1 + (reqWidth - seed.length))
.join('0') + seed;
}
return seed;
};
// BEGIN REDUNDANT
if (!this.php_js) {
this.php_js = {};
}
// END REDUNDANT
if (!this.php_js.uniqidSeed) { // init seed with big random int
this.php_js.uniqidSeed = Math.floor(Math.random() * 0x75bcd15);
}
this.php_js.uniqidSeed++;
retId = prefix; // start with prefix, add current milliseconds hex string
retId += formatSeed(parseInt(new Date()
.getTime() / 1000, 10), 8);
retId += formatSeed(this.php_js.uniqidSeed, 5); // add seed hex string
if (more_entropy) {
// for more entropy we add a float lower to 10
retId += (Math.random() * 10)
.toFixed(8)
.toString();
}
return retId;
}