Skip to content

Instantly share code, notes, and snippets.

@MJGTwo
Created June 18, 2019 19:09
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 MJGTwo/a4f819a48f8e59de59e55bf39b651916 to your computer and use it in GitHub Desktop.
Save MJGTwo/a4f819a48f8e59de59e55bf39b651916 to your computer and use it in GitHub Desktop.
Useful uuid script. Made by Jeff Ward, updated to TypeScript by me.
const lut: string[] = [];
for (let i = 0; i < 256; i++) {
lut[i] = (i < 16 ? '0' : '') + i.toString(16);
}
/*
* Fast UUID generator, RFC4122 version 4 compliant.
* @author Jeff Ward (jcward.com).
* @license MIT license
* @link http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/21963136#21963136
*/
export function v4() {
const d0 = (Math.random() * 0xffffffff) | 0;
const d1 = (Math.random() * 0xffffffff) | 0;
const d2 = (Math.random() * 0xffffffff) | 0;
const d3 = (Math.random() * 0xffffffff) | 0;
return (
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]
);
}
export function token(isShort: boolean) {
const d0 = (Math.random() * 0xffffffff) | 0;
const d1 = (Math.random() * 0xffffffff) | 0;
const short =
lut[(d0 >> 16) & 0xff] +
lut[(d0 >> 24) & 0xff] +
lut[d1 & 0xff] +
lut[(d1 >> 8) & 0xff];
return isShort
? short
: short + lut[(d1 >> 16) & 0xff] + lut[(d1 >> 24) & 0xff];
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment