2012-08-31 20 views
11

Tengo un script que, cuando un usuario carga, crea una identificación única. Que luego se guarda en localStorage y se usa para rastrear transacciones. Algo así como usar una cookie, excepto porque el navegador está generando la identificación única, puede haber colisiones cuando se envía al servidor. En este momento estoy usando el siguiente código:Crear identificación global única en JavaScript

function genID() { 
    return Math.random().toString(36).substr(2) 
     + Math.random().toString(36).substr(2) 
     + Math.random().toString(36).substr(2) 
     + Math.random().toString(36).substr(2); 
} 

me di cuenta que es una aplicación muy básica, y quiero alguna información sobre mejores maneras de crear un id "más al azar" que evitará colisiones en el servidor. ¿Algunas ideas?

+0

@CDSanchez Mother effin ... ¿Cómo extrañé eso en mi búsqueda ... –

+0

tiene javascript have GUID? –

+0

@SamIam phpjs, guión bajo, y estoy seguro de que muchas más bibliotecas tienen una función uniqueId, pero JS no proporciona una nativa – SgtPooki

Respuesta

8

Lo he usado en el pasado. Las probabilidades de colisión deberían ser muy bajas.

var generateUid = function (separator) { 
    /// <summary> 
    /// Creates a unique id for identification purposes. 
    /// </summary> 
    /// <param name="separator" type="String" optional="true"> 
    /// The optional separator for grouping the generated segmants: default "-".  
    /// </param> 

    var delim = separator || "-"; 

    function S4() { 
     return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1); 
    } 

    return (S4() + S4() + delim + S4() + delim + S4() + delim + S4() + delim + S4() + S4() + S4()); 
}; 
+0

Me gusta la forma en que restringió la longitud del valor aleatorio. –

+0

@James South, no lo entendí exactamente ... ¿puedes explicarlo? –

+0

¿Qué hace el '0x10000'? –

Cuestiones relacionadas