UUID UUID Generator

Бесплатно · Без регистрации · Без установки

UUID в Java

JDK даёт UUID.randomUUID() для версии 4 и UUID.nameUUIDFromBytes() для детерминированного значения. Версия 7, упорядоченный по времени формат RFC 9562, требует небольшой библиотеки — ниже о том, что выбрать и почему.

  • v4 без зависимостей
  • Детерминированный v3 в комплекте
  • v7 через библиотеку

Генератор UUID v4

v4
От 1 до 1000.
Форматирование

Результат 0

    Создаётся локально через Web Crypto API — данные не покидают ваш браузер. Быстро: Ctrl + Enter — Обновлено

    Что такое UUID в Java

    UUID.randomUUID() входит в java.util с Java 5. Метод возвращает UUID версии 4 варианта 2, построенный на криптостойком генераторе, и это правильный выбор по умолчанию для идентификаторов запросов, ключей сущностей и корреляции в логах. Обратите внимание на вариант: JDK выдаёт вариант IETF, а не старую раскладку Microsoft, поэтому 17-й hex-символ всегда в диапазоне 8b.

    Если значение должно воспроизводиться, UUID.nameUUIDFromBytes(bytes) хэширует произвольные байты алгоритмом MD5 в UUID версии 3: один и тот же вход даёт один и тот же идентификатор в любой JVM. Встроенных v5 (SHA-1) и v7 в JDK нет, поэтому для упорядоченных по времени ключей, сохраняющих последовательность вставок в B-дерево, нужна библиотека, например uuid-creator, где UuidCreator.getTimeOrderedEpoch() создаёт значения v7.

    Как использовать

    1. Вызовите UUID.randomUUID() для случайного идентификатора v4.
    2. Используйте UUID.nameUUIDFromBytes(byte[]), когда значение должно выводиться из естественного ключа.
    3. Подключите uuid-creator, если нужен v7 и последовательные вставки в индекс.

    Сценарии

    • Идентификаторы сущностей и запросов в приложениях на Spring и Jakarta EE: случайный v4 не требует обращения к базе.
    • Детерминированные ключи дедупликации: хэш составного бизнес-ключа стабилен между сервисами.
    • Correlation id в логах и трассировке, где компактный шестнадцатеричный идентификатор удобнее для поиска.

    Сравнение UUID в Java с другими форматами

    ВариантКогда использовать
    UUID.randomUUID()v4, криптостойкий, входит в JDK.
    UUID.nameUUIDFromBytes()v3, MD5 от входа: детерминирован, но не устойчив к подбору входа.
    uuid-creator (библиотека)Добавляет v6, v7 и v8; <code>getTimeOrderedEpoch()</code> даёт v7.
    Identity-столбец базыПоследовательный, но требует базы и раскрывает число строк.

    Примеры кода

    Случайный v4

    import java.util.UUID;
    
    UUID id = UUID.randomUUID();
    System.out.println(id);          // 550e8400-e29b-41d4-a716-446655440000
    System.out.println(id.version());  // 4
    System.out.println(id.variant());  // 2

    Детерминированный v3

    import java.util.UUID;
    import java.nio.charset.StandardCharsets;
    
    UUID stable = UUID.nameUUIDFromBytes(
        "user:42".getBytes(StandardCharsets.UTF_8));
    // один入口 — один UUID в любой JVM

    Упорядоченный v7 (библиотека)

    // implementation 'com.github.f4b6a3:uuid-creator:6.0.0'
    import com.github.f4b6a3.uuid.UuidCreator;
    
    UUID v7 = UuidCreator.getTimeOrderedEpoch();
    // 019535d9-3df7-79fb-b466-fa907fa17f9e
    
    // Созданные позже значения сортируются позже — вставки идут последовательно

    Разбор и проверка

    import java.util.UUID;
    
    try {
        UUID parsed = UUID.fromString(input);
        // корректный формат **и** допустимые hex-символы
    } catch (IllegalArgumentException notAUuid) {
        // отклонить ввод
    }

    Частые вопросы

    Есть ли в Java встроенный UUID v7?

    Нет. JDK содержит только v3 (nameUUIDFromBytes) и v4 (randomUUID). Для v7 нужна сторонняя библиотека — чаще всего uuid-creator, — либо генерация на стороне базы, например функцией uuidv7() в PostgreSQL 18.

    Достаточно ли UUID.randomUUID() уникален для первичного ключа?

    Статистически да: 122 случайных бита дают ту же вероятность коллизии, что и любой другой генератор v4. Практическая претензия к v4 не в коллизиях, а в локальности: случайные значения разбрасываются по B-дереву, и именно это исправляет v7.

    Можно ли хранить UUID в long или массиве байт?

    Да. У UUID есть getMostSignificantBits() и getLeastSignificantBits(), поэтому значение помещается в два long или, компактнее, в 16 байт столбца BINARY(16) — вдвое меньше строки из 36 символов.