I need to create UUID's / GUIDs with Javascript, but I did not find any function in the documentation. Do you know / recommend any existing library that generates valid and satisfactorily random UUIDs?
I need to create UUID's / GUIDs with Javascript, but I did not find any function in the documentation. Do you know / recommend any existing library that generates valid and satisfactorily random UUIDs?
Versions based on crypto.getRandomValues()
can guarantee a lower collision rate than Math.random()
.
function uuid() {
// Retorna um número randômico entre 0 e 15.
function randomDigit() {
// Se o browser tiver suporte às bibliotecas de criptografia, utilize-as;
if (crypto && crypto.getRandomValues) {
// Cria um array contendo 1 byte:
var rands = new Uint8Array(1);
// Popula o array com valores randômicos
crypto.getRandomValues(rands);
// Retorna o módulo 16 do único valor presente (%16) em formato hexadecimal
return (rands[0] % 16).toString(16);
} else {
// Caso não, utilize random(), que pode ocasionar em colisões (mesmos valores
// gerados mais frequentemente):
return ((Math.random() * 16) | 0).toString(16);
}
}
// A função pode utilizar a biblioteca de criptografia padrão, ou
// msCrypto se utilizando um browser da Microsoft anterior à integração.
var crypto = window.crypto || window.msCrypto;
// para cada caracter [x] na string abaixo um valor hexadecimal é gerado via
// replace:
return 'xxxxxxxx-xxxx-4xxx-8xxx-xxxxxxxxxxxx'.replace(/x/g, randomDigit);
}
console.log(uuid());
You can see that the return string has 2 fixed values, 4 for the 3rd block and 8 for the 4th. This is part of the specification for random GUIDs version 4 .
I did some research and found some functions that might help you.
To generate the UUID you can use the function below:
function create_UUID(){
var dt = new Date().getTime();
var uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
var r = (dt + Math.random()*16)%16 | 0;
dt = Math.floor(dt/16);
return (c=='x' ? r :(r&0x3|0x8)).toString(16);
});
return uuid;
}
console.log(create_UUID());
To generate the GUID can be done as below:
function S4() {
return (((1+Math.random())*0x10000)|0).toString(16).substring(1);
}
function create_GUID(){
return (S4() + S4() + "-" + S4() + "-4" + S4().substr(0,3) + "-" + S4() + "-" + S4() + S4() + S4()).toLowerCase();
}
console.log(create_GUID());
References: