Skip to content

Instantly share code, notes, and snippets.

@smonn
Last active March 27, 2022 10:49
Show Gist options
  • Save smonn/3390418 to your computer and use it in GitHub Desktop.
Save smonn/3390418 to your computer and use it in GitHub Desktop.
UUID v4 generation

Not the smallest footprint out there, but it seems to be faster when I compare against other solutions, but not when I use jsperf.com for some reason. This solution is based upon that gist by the way. Biggest difference is that this is more readable...

This will generate a version 4 UUID. The non-packed version passes JSLint. Performance comparison at jsperf.

Reduced footprint.

/*jslint indent: 2 */
(function (global) {
'use strict';
global.uuid = (function () {
var that = {},
internal = {};
that.create = function () {
var result = '';
result = internal.recursiveCreator(result);
return result;
};
internal.recursiveCreator = function (result) {
if (result.length === 36) {
return result;
}
result += internal.addHexadecimalOrDash(result.length);
return internal.recursiveCreator(result);
};
internal.addHexadecimalOrDash = function (index) {
if (internal.shouldAddDash(index)) {
return '-';
}
return internal.randomHexadecimal(index);
};
internal.shouldAddDash = function (index) {
return index === 8 || index === 13 || index === 18 || index === 23;
};
internal.randomHexadecimal = function (index) {
var random;
if (index === 14) {
// Required for version 4 of UUID
return '4';
}
random = internal.randomNumber(index);
return random.toString(16);
};
internal.randomNumber = function (index) {
if (index === 19) {
// Required for version 4 of UUID
return Math.floor(Math.random() * 4) + 8;
}
return Math.floor(Math.random() * 16);
};
return that.create;
}());
}(this));
(function(d){'use strict';d.uuid=(function(){var c={},internal={};c.create=function(){var a='';a=internal.recursiveCreator(a);return a};internal.recursiveCreator=function(a){if(a.length===36){return a}a+=internal.addHexadecimalOrDash(a.length);return internal.recursiveCreator(a)};internal.addHexadecimalOrDash=function(a){if(internal.shouldAddDash(a)){return'-'}return internal.randomHexadecimal(a)};internal.shouldAddDash=function(a){return a===8||a===13||a===18||a===23};internal.randomHexadecimal=function(a){var b;if(a===14){return'4'}b=internal.randomNumber(a);return b.toString(16)};internal.randomNumber=function(a){if(a===19){return Math.floor(Math.random()*4)+8}return Math.floor(Math.random()*16)};return c.create}())}(this));
(function (exports) {
'use strict';
var random = function (multiplier) {
return Math.floor(Math.random() * multiplier);
},
hexadecimal = function (index) {
return ((index === 19) ? random(4) + 8 : random(16)).toString(16);
},
nexttoken = function (index) {
if (index === 8 || index === 13 || index === 18 || index === 23) {
return '-';
}
if (index === 14) {
return '4';
}
return hexadecimal(index);
},
generate = function () {
var index, uuid = '';
while ((index = uuid.length) < 36) {
uuid += nexttoken(index);
}
return uuid;
};
exports.generate = generate;
}(typeof exports === 'undefined' ? this.uuid = {} : exports));
(function(a){"use strict";var b=function(a){return Math.floor(Math.random()*a)},c=function(a){return(19===a?b(4)+8:b(16)).toString(16)},d=function(a){return 8===a||13===a||18===a||23===a?"-":14===a?"4":c(a)},e=function(){for(var a,b="";36>(a=b.length);)b+=d(a);return b};a.generate=e})("undefined"==typeof exports?this.uuid={}:exports);
/*jslint indent: 2 */
(function (global) {
'use strict';
global.uuid = (function () {
var that = {},
internal = {};
that.create = function () {
var i,
result = '';
for (i = 0; i < 36; i += 1) {
result += internal.addHexadecimalOrDash(i);
}
return result;
};
internal.addHexadecimalOrDash = function (index) {
if (internal.shouldAddDash(index)) {
return '-';
}
return internal.randomHexadecimal(index);
};
internal.shouldAddDash = function (index) {
return index === 8 || index === 13 || index === 18 || index === 23;
};
internal.randomHexadecimal = function (index) {
var random;
if (index === 14) {
// Required for version 4 of UUID (random)
return '4';
}
random = internal.randomNumber(index);
return random.toString(16);
};
internal.randomNumber = function (index) {
if (index === 19) {
// Required for version 4 of UUID (random)
return Math.floor(Math.random() * 4) + 8;
}
return Math.floor(Math.random() * 16);
};
return that.create;
}());
}(this));
(function(d){'use strict';d.uuid=(function(){var c={},internal={};c.create=function(){var i,result='';for(i=0;i<36;i+=1){result+=internal.addHexadecimalOrDash(i)}return result};internal.addHexadecimalOrDash=function(a){if(internal.shouldAddDash(a)){return'-'}return internal.randomHexadecimal(a)};internal.shouldAddDash=function(a){return a===8||a===13||a===18||a===23};internal.randomHexadecimal=function(a){var b;if(a===14){return'4'}b=internal.randomNumber(a);return random.toString(16)};internal.randomNumber=function(a){if(a===19){return Math.floor(Math.random()*4)+8}return Math.floor(Math.random()*16)};return c.create}())}(this));
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment