How to generate UUID's / GUIDs with Javascript?

2

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?

    
asked by anonymous 13.04.2017 / 14:43

2 answers

3

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 .

Font

    
13.04.2017 / 15:09
0

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:

link link

    
13.04.2017 / 15:12