Создавать глобально уникальный идентификатор в JavaScript

У меня есть script, который при загрузке пользователя создает уникальный идентификатор. Затем он сохраняется в localStorage и используется для отслеживания транзакций. Подобно использованию cookie, за исключением того, что браузер генерирует уникальный идентификатор, при отправке на сервер могут возникать столкновения. Сейчас я использую следующий код:

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);
}

Я понимаю, что это супер базовая реализация, и хочу получить обратную связь о лучших способах создания "более случайного" идентификатора, который предотвратит коллизии на сервере. Любые идеи?

Ответ 1

Я использовал это в прошлом. Коэффициенты столкновений должны быть очень низкими.

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());
};