java.util.UUID.randomUUID().toString() длина

Всегда ли java.util.UUID.randomUUID(). ToString() длина равна 36?

Я не смог найти информацию об этом. Здесь сказано только следующее:

public static UUID randomUUID () Статическая фабрика для получения UUID типа 4 (псевдослучайно сгенерированного). UUID генерируется с использованием криптографически сильного генератора псевдослучайных чисел. Возвращает: случайно сгенерированный UUID

И это type 4 ничего не говорит мне Я не знаю, что означает тип 4 в этом случае.

1 ответ

Решение

Всегда ли java.util.UUID.randomUUID(). ToString() длина равна 36?

Да!! это.

UUID на самом деле 128-битное значение (2 длинные). Для представления 128 бит в шестнадцатеричную строку будет 128/4=32 символ (каждый символ длиной 4 бита). В строковом формате он также содержит 4 (-) вот почему длина составляет 36.

пример: 54947df8-0e9e-4471-a2f9-9af509fb5889

32 шестнадцатеричных символа + 4 символа дефиса = 36 символов Так что длина будет всегда одинаковой.


Обновить:

Я не знаю, что означает тип 4 в корпусе.

К вашему сведению: есть несколько способов генерации UUID. Здесь тип 4 означает, что этот uuid генерируется с использованием случайного или псевдослучайного числа. Из вики - https://en.wikipedia.org/wiki/Universally_unique_identifier:

Версии

Для обоих вариантов 1 и 2 в стандартах определены пять "версий", и каждая версия может быть более подходящей, чем другие, в конкретных случаях использования. Версия обозначается буквой М в строковом представлении.

UUIDверсии 1 генерируются из времени и идентификатора узла (обычно это MAC-адрес);

UUIDверсии 2 генерируются из идентификатора (обычно группы или идентификатора пользователя), времени и идентификатора узла;

версии 3 и 5 создают детерминированные UUID, генерируемые хэшированием идентификатора и имени пространства имен;

и UUID версии 4 генерируются с использованием случайного или псевдослучайного числа.

Вы можете конвертировать UUIDv4 16-байтовый двоичный файл в 24-байтовый ascii, используя base64, вместо этого кодировать в ascii-hex (32 байта)

Для таких, как я, которые начинают гуглить, прежде чем читать Javadoc, здесь Javadoc;)

UUID.toString

Для тех, кто не знает, как читать грамматическое дерево, читайте снизу вверх.
hexDigit - это один символ
hexOctet равен 2 hexDigits = 2 символа
узел 6 * hexOctet = 6 * 2hexdigit = 6*2 символа = 12 символов
вариант_and_sequence: 2 * hexOctet = 2 * 2hexdigit = 2*2 символа = 4 символа
time_high_and_version - 2 * hexOctet = 2 * 2hexdigit = 2*2 символа = 4 символа
time_mid равно 2 * hexOctet = 2 * 2hexdigit = 2*2 символа = 4 символа
time_low - 4 * hexOctet = 4* 2hexdigit = 4*2 символа = 8 символов
и наконец, UUID является "-" "-" "-" "-"<узел>

= 8 символов + 1 символ + 4 символа + 1 символ + 4 символа + 1 символ + 4 символа + 1 символ + 12 символов

= 36 символов! 128 бит данных + 4 дефиса, как указано ранее

The UUID string representation is as described by this BNF: 

 UUID                   = <time_low> "-" <time_mid> "-"
                          <time_high_and_version> "-"
                          <variant_and_sequence> "-"
                          <node>
 time_low               = 4*<hexOctet>
 time_mid               = 2*<hexOctet>
 time_high_and_version  = 2*<hexOctet>
 variant_and_sequence   = 2*<hexOctet>
 node                   = 6*<hexOctet>
 hexOctet               = <hexDigit><hexDigit>
 hexDigit               =
       "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9"
       | "a" | "b" | "c" | "d" | "e" | "f"
       | "A" | "B" | "C" | "D" | "E" | "F"
Другие вопросы по тегам