•  
  • 0
  •  
0

Как создать GUID / UUID в Javascript?

Я пытаюсь создать глобально уникальные идентификаторы в JavaScript.

Я не уверен в том, что можно использовать в качестве глобальных уникальных идентификаторов во всех браузерах.

GUID / UUID должен быть по крайней мере 32 символьными и должны находиться в диапазоне ASCII, чтобы избежать проблем, при их назначении.

Может у вас есть какие-нибудь соображения на этот счет?

javascript.
спросил 680 дней назад Аватор пользователя community community
100 2
изменил 422 дня назад Аватор пользователя tc tc
718 15
300

3 ответа:

    •  
    • 1
    •  

    Создание GUID/UUID на чистом JavaScript невозможно, т.к. для этого требуется доступ к железу компьютера, т.н. источник энтропии, например текущая температура процессора или частота вращения процессорного вентилятора.

    Можно создать последовательность символов, которые будут похожи на GUID и будут достаточно уникальными, но глобально уникальными они, конечно, не будут.

    В качестве примера:

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

    Чтобы создать настоящий GUID в браузере необходим любой плагин, предоставляющий доступ к функциям ОС (flash, silverlight, etc).

    Небольшая поправка: посмотрел только что RFC, спецификация оказывается разрешает генерировать UUID из псевдослучайных чисел, используя текущее время + генератор псевдослучайных чисел, но только если точность часов - 100 наносекунд или выше. Насколько я знаю, getTime в javascript возвращает время в кол-ве миллисекунд после времени юникс (01.01.1970), поэтому эту функцию нельзя использовать для генерации UUID из псевдослучайных чисел.

    ответил 679 дней назад Аватор пользователя Valentin Valentin
    229 6
    изменил 679 дней назад Аватор пользователя Valentin Valentin
    229 6
    •  
    • 1
    •  

    Утверждение про необходимости доступа к железу не совсем верно. Точнее, совсем не верно. Для того чтобы просидить генератор псевдослучайных чисел нужен некоторый источник энтропии, не обязательно аппаратный непосредственно. В браузере их предостаточно, но, к сожалению, в JS нельзя инициализировать Math.random собственным сидом.

    Вот тут, помимо прочего интересного, хорошо описано (возможно немного устаревше) как работает random в разных реализациях JS: http://www.trusteer.com/list-context/publications/temporary-user-tracking-major-browsers-and-cross-domain-information-leakag

    Но всё это имеет очень мало отношения к изначальному вопросу, конечно (-:

    ответил 678 дней назад Аватор пользователя caesar caesar
    152 5
    •  
    • 0
    •  

    Когда кому то потребовалось создавать GUID в Node.js по этому поводу развернулся довольно интересный тред - возможно, там Вы найдёте какие нибудь интересные идеи )

    ответил 539 дней назад Аватор пользователя kurokikaze kurokikaze
    30
Чтобы написать ответ, вы должны авторизироваться.