Skip to content

Instantly share code, notes, and snippets.

@bartwttewaall
Created June 23, 2022 09:52
Show Gist options
  • Save bartwttewaall/0f92157e95fe09796af29d75721f55b2 to your computer and use it in GitHub Desktop.
Save bartwttewaall/0f92157e95fe09796af29d75721f55b2 to your computer and use it in GitHub Desktop.
generate a UUID (taken from ThreeJS)
const lut: string[] = [];
function getLut(): string[] {
if (lut.length === 0) {
for (let i = 0, hex = ''; i < 256; i++) {
hex = i.toString(16);
lut.push(hex.length === 1 ? `0${hex}` : hex);
}
}
return lut;
}
// http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/21963136#21963136
export function generateUUID(): string {
const _lut = getLut();
const d0 = (Math.random() * 0xffffffff) | 0;
const d1 = (Math.random() * 0xffffffff) | 0;
const d2 = (Math.random() * 0xffffffff) | 0;
const d3 = (Math.random() * 0xffffffff) | 0;
const uuid =
_lut[d0 & 0xff] +
_lut[(d0 >> 8) & 0xff] +
_lut[(d0 >> 16) & 0xff] +
_lut[(d0 >> 24) & 0xff] +
'-' +
_lut[d1 & 0xff] +
_lut[(d1 >> 8) & 0xff] +
'-' +
_lut[((d1 >> 16) & 0x0f) | 0x40] +
_lut[(d1 >> 24) & 0xff] +
'-' +
_lut[(d2 & 0x3f) | 0x80] +
_lut[(d2 >> 8) & 0xff] +
'-' +
_lut[(d2 >> 16) & 0xff] +
_lut[(d2 >> 24) & 0xff] +
_lut[d3 & 0xff] +
_lut[(d3 >> 8) & 0xff] +
_lut[(d3 >> 16) & 0xff] +
_lut[(d3 >> 24) & 0xff];
// .toLowerCase() here flattens concatenated strings to save heap memory space.
return uuid.toLowerCase();
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment