- 0
Как создать GUID / UUID в Javascript?
Я пытаюсь создать глобально уникальные идентификаторы в JavaScript.
Я не уверен в том, что можно использовать в качестве глобальных уникальных идентификаторов во всех браузерах.
GUID / UUID должен быть по крайней мере 32 символьными и должны находиться в диапазоне ASCII, чтобы избежать проблем, при их назначении.
Может у вас есть какие-нибудь соображения на этот счет?
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 из псевдослучайных чисел.
-
- 1
Утверждение про необходимости доступа к железу не совсем верно. Точнее, совсем не верно. Для того чтобы просидить генератор псевдослучайных чисел нужен некоторый источник энтропии, не обязательно аппаратный непосредственно. В браузере их предостаточно, но, к сожалению, в JS нельзя инициализировать Math.random собственным сидом.
Вот тут, помимо прочего интересного, хорошо описано (возможно немного устаревше) как работает random в разных реализациях JS: http://www.trusteer.com/list-context/publications/temporary-user-tracking-major-browsers-and-cross-domain-information-leakag
Но всё это имеет очень мало отношения к изначальному вопросу, конечно (-:
-
- 0
Когда кому то потребовалось создавать GUID в Node.js по этому поводу развернулся довольно интересный тред - возможно, там Вы найдёте какие нибудь интересные идеи )