Создать UUID из отметки времени (как число) - PullRequest
0 голосов
/ 21 июня 2011

Как я могу создать UUID из номера метки времени, используя Javascript?

Есть ли API existente?

Ответы [ 2 ]

3 голосов
/ 21 июня 2011

Согласно странице Википедии , UUID является 128-битным числом.Числа Javascript - это 64-разрядные числа с плавающей запятой ( согласно этому SO-ответу ), поэтому я предполагаю, что у вас уже есть UUID-номер в виде строки.

Цитата из Википедии: "UUID состоит из 32 шестнадцатеричных цифр, отображаемых в 5 группах, разделенных дефисами, в форме 8-4-4-4-12, что в сумме составляет 36 символов (32 цифры и 4 дефиса). "Методу Javascript Number toString можно дать основание (шестнадцатеричное - это основание 16), но, конечно, мы не можем использовать Number s здесь.

Итак, вам понадобится какой-то видкод, который может сначала обрабатывать 128-битные числа, а затем преобразовывать их в шестнадцатеричные.Существуют различные библиотеки Javascript BigDecimal и BigNumber .Просто найдите тот, который вам нравится, возможно, используя SO вопрос в качестве руководства.После этого у вас будет такая строка:

var hexNum = "550e8400e29b41d4a716446655440000";

Затем вы просто объедините различные подстроки с разделителями - и получите строку UUID:

var UUID = hexNum.substr(0, 8) + '-' +  hexNum.substr(8, 4) + '-' + 
  hexNum.substr(12, 4) + '-' + hexNum.substr(16, 4) + '-' + hexNum.substr(20)

Обновление: В процессе написания моего ответа был обновлен исходный вопрос, чтобы спросить, как вы будете создавать UUID из «номера временной метки».Я не уверен, что это будет, возможно, отметка времени Unix, например, результат Date.now().Поскольку предполагается, что идентификаторы UUID (практически) уникальны, а миллисекундное время вряд ли уникально, я думаю, что вы захотите добавить какой-то дополнительный элемент уникальности в число перед созданием числа.Даже если вы этого не сделаете, вам все равно придется преобразовать 64-разрядное Number в 128-разрядное число, снова используя некую библиотеку BigDecimal или BigNumber.

0 голосов
/ 21 июня 2011
...