Ответ
Да, можно. Для этого используется статический метод UUID.nameUUIDFromBytes(), который генерирует UUID версии 3 (на основе MD5-хеша). Результат будет детерминированным: одна и та же строка всегда даст одинаковый UUID.
Базовый пример (UUID v3):
import java.nio.charset.StandardCharsets;
import java.util.UUID;
String inputString = "https://example.com/data";
UUID uuidFromString = UUID.nameUUIDFromBytes(
inputString.getBytes(StandardCharsets.UTF_8)
);
System.out.println(uuidFromString); // Вывод: 5df41881-3aed-3515-88a7-2f4a814cf09e
UUID версии 5 (SHA-1): Стандартная библиотека Java не предоставляет прямой поддержки UUID v5. Для его создания нужна сторонняя библиотека или ручная реализация.
Пример с Apache Commons Id (если библиотека добавлена):
// Зависимость: org.apache.commons:commons-id
import org.apache.commons.id.uuid.UUIDV5;
UUID uuidV5 = UUIDV5.getUUID("example");
Важные замечания:
- Детерминированность: UUID, сгенерированный из строки, постоянен. Это полезно для создания стабильных идентификаторов одних и тех же сущностей (например, URL).
- Версия:
nameUUIDFromBytesсоздает только UUID v3. UUID v5 считается более предпочтительным, так как использует более криптостойкий алгоритм SHA-1. - Пространство имен: В стандарте RFC 4122 для v3/v5 также указывается пространство имен (например, DNS, URL). В примере выше используется кастомное пространство.