1. JavaScript / Говнокод #18947

    +5

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    function createUUID() {
    	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";
    	s[19] = hexDigits.substr((s[19] & 0x3) | 0x8, 1);
    	s[8] = s[13] = s[18] = s[23] = "-";
    	var uuid = s.join("");
    	return uuid.substring(0, 18);
    }

    Интересно, тот кто это писал сам то понял что написал.. и зачем?

    P.S. взято отсюда - https://github.com/flashphoner/flashphoner_client/blob/wcs_api/client/src/Flashphoner.js

    Запостил: Darth, 02 Ноября 2015

    Комментарии (11) RSS

    • Зато он знает про особый смысл s[14] и s[19].
      Ответить
      • А в чем он?
        Ответить
        • https://en.wikipedia.org/wiki/Universally_unique_identifier - Version 4.

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

          как по мне, ууиды есть просто говно. некрософт их запустил в широкое использование, но мне лично еще не разу не встречалось их использование которое не было бы говном. народ почему то верит что у ууидов есть магическое свойство никогда и ни при каких условиях не повторятся. наверное потому что "уникальный" в имене стоит.
          Ответить
          • Вы совершенно неправы в своем сарказме по поводу уникальности. Вероятность повторения UUID действительно настолько мала, что ее хватает для огромного количества задач.

            Вы также неправы, приписывая "некрософту" UUID - это далеко не их творение.

            Вы, очевидно, даже не потрудились прочитать статью, ссылку на которую привели.
            Ответить
            • В данном примере даже текущее дата-время не встречается, единственный источнег униКАЛьности это рандсид, можно просто рандсид в качестве уида возвращать, это нисколько не испортит этот код.
              Ответить
            • > Вероятность повторения UUID действительно настолько мала, что ее хватает для огромного количества задач.

              Поэтому наверное "огромное количество" програм с некоторой малой вероятносью падают?

              В большинстве случаев уникальный идентификатор либо не нужен (80% случаев), либо тривиальный счетчик работает лучше (19% случаев).

              В крайнем случае (1%), если хорошие IDы нужны, нужно заводить какую уже базу что бы гарантировано уникальные ключи генерировать.

              > Вы также неправы, приписывая "некрософту" UUID - это далеко не их творение.

              Я и не припысывал. Я написал что они популяризировали (ака "запустили в широкое использование").

              > Вы, очевидно, даже не потрудились прочитать статью, ссылку на которую привели.

              Читал я ее уже раз 5 за последние 15 лет. А сейчас на самом деле поленился.
              Ответить
              • Ох ладно, спорить с вашей личной статистикой мне неохота. Раз вам UUID не нужен - значит он говно, и не нужен никому. Я все понял. Удачи.
                Ответить
        • Старики говорят, что волхвы обладали этим знанием.

          https://tools.ietf.org/html/rfc4122

          The variant field determines the layout of the UUID.
             Msb0  Msb1  Msb2  Description
              0     x     x    Reserved, NCS backward compatibility.
              1     0     x    The variant specified in this document.
              1     1     0    Reserved, Microsoft Corporation backward  compatibility
              1     1     1    Reserved for future definition.

          The version number is in the most significant 4 bits of the time
             stamp (bits 4 through 7 of the time_hi_and_version field).
             Msb0  Msb1  Msb2  Msb3   Version  Description
              0     0     0     1        1     The time-based version specified in this document.
              0     0     1     0        2     DCE Security version, with embedded POSIX UIDs.
              0     0     1     1        3     The name-based version specified in this document that uses MD5 hashing.
              0     1     0     0        4     The randomly or pseudo-randomly generated version specified in this document.
              0     1     0     1        5     The name-based version specified in this document that uses SHA-1 hashing.
          Ответить
        • И в чем смысл этого особого смысла применительно к данному примеру? Особенно s[19], если его отрезают в return.
          14 вроде как старший бит инта, 15 бит это уже знак. в остальном присоединяюсь к вопросу
          Ответить
          • В ууидах числа считаются беззнаковыми.

            > Особенно s[19], если его отрезают в return.

            А вот это уже смешно.
            Ответить
          • P.S. А где здесь работа с битами, кроме строки, в которой определяется s[19]?
            Ответить

    Добавить комментарий