Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Spec Compliant UUIDv4 Generator using the Web Crypto API
// uuid returns an RFC 4122 compliant universally unique
// identifier using the crypto API
function uuid() {
// get sixteen unsigned 8 bit random values
var u = window
.crypto
.getRandomValues(new Uint8Array(16));
// set the version bit to v4
u[6] = (u[6] & 0x0f) | 0x40
// set the variant bit to "don't care" (yes, the RFC
// calls it that)
u[8] = (u[8] & 0xbf) | 0x80
// hex encode them and add the dashes
var uid = "";
uid += u[0].toString(16);
uid += u[1].toString(16);
uid += u[2].toString(16);
uid += u[3].toString(16);
uid += "-";
uid += u[4].toString(16);
uid += u[5].toString(16);
uid += "-";
uid += u[6].toString(16);
uid += u[7].toString(16);
uid += "-";
uid += u[8].toString(16);
uid += u[9].toString(16);
uid += "-";
uid += u[10].toString(16);
uid += u[11].toString(16);
uid += u[12].toString(16);
uid += u[13].toString(16);
uid += u[14].toString(16);
uid += u[15].toString(16);
return uid;
}
// outputs something like:
// 6fc4b899-44af-4092-a0ee-b391e90eef12
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment