Создать GUID / UUID в JavaScript?

Если кто-то все еще ищет это, вот как это сработало для меня.

Вам нужно найти IP-адрес вашей машины в отношении подключенного устройства / эмулятора. Для эмуляторов на пути: нижеследующие шаги;

  1. Перейти к виртуальному виртуальному ящику виртуальной машины -> выбрать подключенное устройство в списке.
  2. Выберите «Настройки» -> «Сеть»> «Определите, к какой сети подключено устройство. Для меня это был «VirtualBox Host-Only Ethernet Adapter № 2».
  3. В виртуальном боксе перейдите в раздел «Файлы-> Настройки-> Сеть-> Сети только для хостинга и найдите IPv4 для сети, указанной в выше уровень. (Посредством Hovering вы получите информацию)

Предоставьте этому IP-адресу доступ к локальному хосту из эмулятора. Порт такой же, как и при запуске / публикации ваших сервисов.

Примечание # 1: Убедитесь, что вы позаботились о брандмауэрах и правилах входа.

Примечание # 2: Пожалуйста, проверьте этот IP-адрес после перезагрузки компьютера. По какой-то причине даже если я предоставил «Использовать следующий IP-адрес», IP-адрес «Только для хоста» был изменен.

3787
задан 7 revs, 5 users 50% 26 December 2014 в 23:36
поделиться

9 ответов

UUID (Универсально Уникальный идентификатор), также известный как GUID (Глобально уникальный идентификатор), согласно RFC 4122 , являются идентификаторами с определенной гарантией уникальности.

лучший способ генерировать их, должен следовать инструкциям по реализации в упомянутом RFC, использовать одного из многих, сообщество исследовало реализации с открытым исходным кодом.

А популярный инструмент Open Source для работы с UUID в JavaScript узел-uuid

Примечание, которое, просто случайным образом генерируя байт идентификаторов байтом или символ символом, не даст Вам те же гарантии как соответствующую реализацию. Кроме того, очень важный, системы, работающие с совместимыми UUID, могут принять решение не принять случайным образом сгенерированные, и много блоков проверки допустимости с открытым исходным кодом на самом деле проверят на допустимую структуру.

UUID должен иметь этот формат:

xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx

, Где M и Н положения могут только иметь определенные значения. В это время единственные допустимые значения для M равняются 1, 2, 3, 4 и 5, так случайным образом генерация, что положение сделало бы большинство результатов недопустимым.

2189
ответ дан 21 revs, 16 users 17% 26 December 2014 в 23:36
поделиться
  • 1
    Да Luke 3.1 намного лучше (спасибо и извинения за то, что не прокомментировали раньше) и 3.1 также работы приятно с Социальным Spring. Я все еще должен пойти посмотреть на Код в системе защиты Spring часто для понимания то, что продолжается (таким образом, я знаю имя очень хорошо:)), поскольку XML DSL смущает меня. I' m не большой поклонник конфигурации Java (по XML), но для безопасности Spring конфигурируется, я мог бы на самом деле предпочесть, но от того, что я понимаю ее все еще не возможный сделать конфигурацию Java с безопасностью Spring. – Adam Gent 3 December 2012 в 19:03

Веб-сервис был бы полезен.

Google Quick нашел: http://www.hoskinson.net/GuidGenerator/

не Может ручаться за эту реализацию, но КТО-ТО должен опубликовать bonafide генератор GUID.

С таким веб-сервисом, Вы могли разработать веб-интерфейс REST, который использует веб-сервис GUID и служит ему через Ajax к JavaScript в браузере.

31
ответ дан Sean 26 December 2014 в 23:36
поделиться

От технический блог sagi shkedy:

function generateGuid() {
  var result, i, j;
  result = '';
  for(j=0; j<32; j++) {
    if( j == 8 || j == 12 || j == 16 || j == 20) 
      result = result + '-';
    i = Math.floor(Math.random()*16).toString(16).toUpperCase();
    result = result + i;
  }
  return result;
}

существуют другие методы, которые включают использование элемента управления ActiveX, но избегают их!

Редактирование: я думал, что стоило указать, что никакой генератор GUID не может гарантировать уникальные ключи (проверьте статья Википедии). Всегда существует шанс коллизий. GUID просто предлагает достаточно большую вселенную ключей для сокращения изменения коллизий почти к нолю.

41
ответ дан 4 revs, 3 users 89% 26 December 2014 в 23:36
поделиться
  • 1
    I' m довольно в новинку для потоковой передачи видео на Android. Вы могли изложить в деталях объяснение? – JohnK 28 June 2012 в 12:50

От старая добрая Википедия существует ссылка на реализацию JavaScript UUID.

Это выглядит довольно изящным, и могло, возможно, быть улучшено путем соления с хешем IP-адреса клиента. Этот хеш мог, возможно, быть вставлен в серверную сторону документа HTML для использования клиентским JavaScript.

ОБНОВЛЕНИЕ: исходный сайт имел перестановку, вот обновленная версия

25
ответ дан Dan 26 December 2014 в 23:36
поделиться

Для RFC4122 Решение для совместимого версии 4 Этот режим одноклассника (ISH) является наиболее компактным, я мог бы придумать:

 Функция UUIDV4 () {  Вернуться 'xxxxxxxx-xxxx-4xxxxxxxxxx-4xxxxxxxxx'xxxxxxxxx'.replace (/ [xy] / g, функция (c) {var r = math.random () * 16 | 0, v = c ==' x '? r  : (R & 0x3 | 0x8); return v.tostring (16);});  } Console.log (uuidv4 ()); 

Обновление, 2015-06-02 : Будьте в виду, что уникальность UUID сильно зависит от базового генератора случайного номера (RNG). Раствор выше использования Math.random () Для краткости , однако Math.random () - , не гарантированно, чтобы быть высококачественным RNG. Смотрите Adam Hyland's Отличная перезапись на Math.random () для деталей. Для более надежного решения, рассмотрим что-то вроде модуль UUID (отказ от ответственности: я автор), который использует более высокое качество RNG API, где доступны.

Обновление, 2015-08-26 : в качестве бокового примечания это Gist описывает, как определить, сколько идентификаторов может быть сгенерировано до достижения определенной вероятности столкновения. Например, с 3.26x10 15 Версия 4 RFC4122 UUID у вас есть шанс столкновения в 1-м миллионе.

Обновление, 2017-06-28 : А Хорошая статья от разработчиков Chrome Обсуждая состояние качества Math.random Prng в Chrome, Firefox и Safari. TL; DR - по состоянию на конец 2015 года это «довольно хорошо», но не криптографическое качество. Чтобы решить эту проблему, вот обновленная версия вышеуказанного решения, в которой используется ES6, API API , а также немного волшебности JS, я не могу взять кредит на :

  Функция uuidv4 () {return ([1e7] + - 1e3 + -4e3 + -8E3 + -1E11) .replace (/ [018] / g, c => (c ^ crypto.getrandomvalues ​​(новый uint8array (1)) [0] &  15 >> C / 4) .tostring (16));  } Console.log (uuidv4 ()); 
3812
ответ дан 17 December 2019 в 16:00
поделиться

Вот код, основанный на RFC 4122 , раздел 4.4 (Алгоритмы создания UUID из действительно случайного или псевдослучайного числа).

function createUUID() {
    // http://www.ietf.org/rfc/rfc4122.txt
    var s = [];
    var hexDigits = "0123456789abcdef";
    for (var i = 0; i < 36; i++) {
        s[i] = hexDigits.substr(Math.floor(Math.random() * 0x10), 1);
    }
    s[14] = "4";  // bits 12-15 of the time_hi_and_version field to 0010
    s[19] = hexDigits.substr((s[19] & 0x3) | 0x8, 1);  // bits 6-7 of the clock_seq_hi_and_reserved to 01
    s[8] = s[13] = s[18] = s[23] = "-";

    var uuid = s.join("");
    return uuid;
}
151
ответ дан 17 December 2019 в 16:00
поделиться

Это создает UUID версии 4 (созданный из псевдослучайных чисел):

function uuid()
{
   var chars = '0123456789abcdef'.split('');

   var uuid = [], rnd = Math.random, r;
   uuid[8] = uuid[13] = uuid[18] = uuid[23] = '-';
   uuid[14] = '4'; // version 4

   for (var i = 0; i < 36; i++)
   {
      if (!uuid[i])
      {
         r = 0 | rnd()*16;

         uuid[i] = chars[(i == 19) ? (r & 0x3) | 0x8 : r & 0xf];
      }
   }

   return uuid.join('');
}

Вот пример сгенерированных UUID:

682db637-0f31-4847-9cdf-25ba9613a75c
97d19478-3ab2-4aa1-b8cc-a1c3540f54aa
2eed04c9-2692-456d-a0fd-51012f947136
25
ответ дан 17 December 2019 в 16:00
поделиться

Это простой AJAX-звонок...

Если кому-то все еще интересно, вот мое решение.

На стороне сервера:

[WebMethod()]
public static string GenerateGuid()
{
    return Guid.NewGuid().ToString();
}

На стороне клиента:

var myNewGuid = null;
PageMethods.GenerateGuid(
    function(result, userContext, methodName)
    {
        myNewGuid = result;
    },
    function()
    {
        alert("WebService call failed.");
    }
);
11
ответ дан 17 December 2019 в 16:00
поделиться
  // RFC 4122
  //
  // A UUID is 128 bits long
  //
  // String representation is five fields of 4, 2, 2, 2, and 6 bytes.
  // Fields represented as lowercase, zero-filled, hexadecimal strings, and
  // are separated by dash characters
  //
  // A version 4 UUID is generated by setting all but six bits to randomly
  // chosen values
  var uuid = [
    Math.random().toString(16).slice(2, 10),
    Math.random().toString(16).slice(2, 6),

    // Set the four most significant bits (bits 12 through 15) of the
    // time_hi_and_version field to the 4-bit version number from Section
    // 4.1.3
    (Math.random() * .0625 /* 0x.1 */ + .25 /* 0x.4 */).toString(16).slice(2, 6),

    // Set the two most significant bits (bits 6 and 7) of the
    // clock_seq_hi_and_reserved to zero and one, respectively
    (Math.random() * .25 /* 0x.4 */ + .5 /* 0x.8 */).toString(16).slice(2, 6),

    Math.random().toString(16).slice(2, 14)].join('-');
17
ответ дан 17 December 2019 в 16:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: