На тему состава UUID4, согласно Википедии.. .
UUID версии 4 имеют вид xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx, где x — любая шестнадцатеричная цифра, а y — одна из 8, 9, A или B.
Итак, я могу придумать три возможных метода, которые программист может использовать для генерации случайного UUID4:
Метод A) Используйте «правильную» библиотеку генерации UUID4, которая уже существует.
-or-
Метод Б) Создайте свой собственный, просто используя случайные шестнадцатеричные символы в строке:
- Начните со строки «xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx».
- Замените символы «x» случайными шестнадцатеричными символами (0–9a–f).
- Замените «y» любым из: 8 9 a b
Приведенные выше шаги являются лишь одним простым примером того, как это можно сделать в виде строки символов. Пожалуйста, считайте, что любой другой метод, работающий со строкой символов и случайно выбранными шестнадцатеричными символами, по-прежнему является «MethodB», например, начиная с пустой строки и добавляя символы по одному.
-or-
Метод C: Создайте свой собственный с побитовыми операциями:
Я предполагаю, что так делают большинство библиотек? Использование в основном случайных битов при обеспечении того, чтобы «4» и «8/9/a/b» были в окончательной сгенерированной строке.
Вопросы:
Q1: Существуют ли технические различия в результирующем UUIDv4, который будет создан с точки зрения их случайности или общей совместимости с базами данных и т. д., в которых будет храниться UUIDv4?
Q2: Есть ли недостатки в использовании метода № 2 (случайные шестнадцатеричные символы) вместо № 1 или № 3 (побитовый)?
Q3: Делают ли «правильные» библиотеки генерации UUIDv4 в MethodA что-то особенное помимо того, как это делают простые подходы в MethodB и MethodC?
Q4: Любой метод больше похож на конфликты?
Q5: Являются ли результирующие UUID, сгенерированные методом MethodB + MethodC, полностью совместимыми со спецификацией UUIDv4 (даже если они не соответствуют своей методологии для достижения этой цели).
Примечания:
- Этот вопрос относится только к UUID версии 4.
- Очевидно, что проще просто использовать библиотеку, я просто спрашиваю о различиях в полученном сгенерированном UUIDv4 результате, а не о количестве усилий, которые вкладывает программист.
- Я также не очень обеспокоен производительностью с вышеуказанными вопросами. Но если у вас также есть какие-либо комментарии по этому поводу, это тоже может быть интересно. Я бы предположил, что библиотеки лучше работают.