2012-08-31 21 views
11

Mam skrypt, który po załadowaniu użytkownika tworzy unikalny identyfikator. Który jest następnie zapisany w localStorage i używany do śledzenia transakcji. Podobnie jak przy użyciu cookie, z wyjątkiem tego, że przeglądarka generuje unikalny identyfikator, mogą wystąpić kolizje podczas wysyłania na serwer. Teraz używam następujący kod:Tworzenie unikalnego identyfikatora globalnego w 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); 
} 

Zdaję sobie sprawę, że jest to bardzo podstawowe wdrożenie i chcesz jakąś opinię na temat lepszych sposobów, aby utworzyć „bardziej losowy” id, które zapobiega kolizjom na serwerze. Jakieś pomysły?

+0

@CDSanchez Matka effin ... Jak ja tęsknię, że w moich poszukiwaniach ... –

+0

ma javascript mają GUID? –

+0

@ SamIam phpjs, podkreślenie, i jestem pewien, że wiele innych bibliotek ma funkcję uniqueId, ale JS nie zapewnia jednego natywnie – SgtPooki

Odpowiedz

8

Użyłem tego w przeszłości. Zderzenia kolizji powinny być bardzo niskie.

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

Podoba mi się sposób, w jaki ograniczyłeś losową długość. –

+0

@ James South, nie dostałem tego dokładnie .. możesz wyjaśnić? –

+0

Co robi "0x10000"? –

Powiązane problemy