Skip to content

Instantly share code, notes, and snippets.

@dfkaye
Last active May 30, 2022 06:31
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save dfkaye/9edb38fdae1a927b030580ce18d3d7da to your computer and use it in GitHub Desktop.
Save dfkaye/9edb38fdae1a927b030580ce18d3d7da to your computer and use it in GitHub Desktop.
universally unique identifier (UUID) functions: from Blob, from generator function, from mask
// 13 June 2020
// Even better, modified from
// http://abhishekdutta.org/blog/standalone_uuid_generator_in_javascript.html
// 29 May 2022
// Even shorter
function uuid() {
var url = URL.createObjectURL(new Blob());
URL.revokeObjectURL(url);
// remove prefix (e.g. blob:null/, blob:www.test.com/, ...)
return url.substring(url.lastIndexOf("/") + 1);
}
/*
// June 2020 version:
function uuid() {
var temp_url = URL.createObjectURL(new Blob());
var uuid = temp_url.toString();
URL.revokeObjectURL(temp_url);
return uuid.substring(uuid.length - 36); // remove prefix (e.g. blob:null/, blob:www.test.com/, ...)
}*/
/* test it out */
var tests = Array.from(Array(10)).map((v,i) => uuid());
console.log(JSON.stringify(tests, null, 2));
/*
[
"4079a4ea-ab95-4be0-90e4-b00b235a3832",
"9117bb9a-8327-4e62-8959-1cb5205382ca",
"185257f3-28d1-461a-97ec-a331f7be271b",
"9392e5d5-ee7e-4546-98f0-6219dbced7f6",
"2de94b6d-3aaf-4a95-849b-9a64c17de812",
"fdcb5171-c860-43bc-b17d-23bc32041512",
"56dfddec-bfb7-40cb-83e2-533d4538f22c",
"592373fd-0f21-4e96-8242-8e50c70417a1",
"f8c4bfb3-48e4-416f-9783-8561ce8a8ead",
"a422d608-12f7-4ce5-b3af-6c0948137823"
]
*/
// 27 July 2019
// UUID generator function
// from https://codeburst.io/javascript-generator-yield-next-async-await-e428b0cb52e4
function* UUIDGenerator() {
let d, r;
while (true) {
yield 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
r = (Date.now() + Math.random() * 16) % 16 | 0;
d = Math.floor(d / 16);
return (c == 'x' ? r : (r & 0x3 | 0x8)).toString(16);
});
}
};
var UUID = UUIDGenerator();
var ids = Array(5).fill(0).map(x => {
var uuid = UUID.next();
console.log(uuid.value);
return uuid.value;
});
console.log(ids);
/*
[
"87a8345b-5d1d-4428-bc9c-0744de22cfe8",
"a36f392b-4ce0-4a59-ad7d-184e058e4ae9",
"481c83ec-a63d-4e3b-9412-6fc2888f0ad7",
"e2214233-c023-47d6-bb5c-f6f3f562b791",
"829f61c3-d376-4817-bcae-b8dc353c4bdb"
]
*/
// 10 Feb 2020
// simplified, no generator*
// Generate a theoretically universally unique identifier.
function UUID() {
return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function(c) {
var r = (Date.now() + Math.random() * 16) % 16 | 0;
return (c == "x" ? r : (r & 0x3) | 0x8).toString(16);
});
}
var ids = Array(5).fill(0).map(x => {
return UUID()
});
console.log(JSON.stringify(ids, null, 2));
/*
[
"1f73aa19-d4a7-4f05-9a58-460be71358de",
"5a967cd6-829d-48c1-ab58-f358aa9d554b",
"d68f0dd1-dbb2-48f6-a76c-8f373dbeef16",
"f35f2dd9-1444-4c1b-9e7d-f19ed489e444",
"6054679f-cc79-411d-91ae-27589f950453"
]
*/
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment