Каковы некоторые из лучших способов создания GUID в Java?
Создание GUID в Java
Ответ 1
Посмотрите класс UUID в комплекте с Java 5 и более поздними версиями.
Например:
- Если вам нужен случайный UUID, вы можете использовать метод randomUUID.
- Если вы хотите, чтобы UUID был инициализирован определенным значением, вы можете использовать конструктор UAID или fromString.
Ответ 2
 java.util.UUID.randomUUID();
Ответ 3
Это зависит от того, какой тип UUID вы хотите.
-  Стандартный класс Java UUIDгенерирует случайные UUID версии 4. (ОБНОВЛЕНИЕ - UUID версии 3 (имя) также могут быть сгенерированы.) Он также может обрабатывать другие варианты, хотя он не может генерировать их. (В этом случае "дескриптор" означает создание экземпляровUUIDиз представленийlong,byte[]илиStringи предоставление некоторых соответствующих средств доступа.)
-  Реализация Java UUID Generator (JUG) направлена на поддержку "всех 3" официальных "типов UUID, как определено в RFC-4122 "... хотя RFC фактически определяет 4 типа и упоминает 5-й тип. 
Для получения дополнительной информации о типах и вариантах UUID в Википедии есть хорошее резюме, а подробности - в RFC 4122 и других спецификациях.
Ответ 4
Просто чтобы расширить ответ Марк Байерс с примером:
import java.util.UUID;
public class RandomStringUUID {
    public static void main(String[] args) {
        UUID uuid = UUID.randomUUID();
        System.out.println("UUID=" + uuid.toString() );
    }
}
Ответ 5
Другие ответы верны, особенно этот Stephen C.
Достижение внешней Java
Создание значения UUID в Java ограничено Версия 4 (случайный) из-за проблем с безопасностью.
Если вы хотите использовать другие версии UUID, один из способов заключается в том, чтобы ваше приложение Java находилось вне JVM для создания UUID, вызывая:
-   Утилита командной строки 
 В комплекте с почти каждой операционной системой.
 Например,uuidgenв Mac OS X, BSD и Linux.
-   Сервер базы данных 
 Используйте JDBC для получения UUID, сгенерированного на сервере базы данных.
 Например, расширениеuuid-osspчасто связано с Postgres. Это расширение может генерировать значения версий 1, 3 и 4 и, кроме того, несколько вариантов:-  uuid_generate_v1mc()- генерирует UUID версии 1, но вместо MAC-адреса компьютера использует случайный многоадресный MAC-адрес.
-  uuid_generate_v5(namespace uuid, name text)- генерирует UUID версии 5, который работает как UUID версии 3, за исключением того, что SHA-1 используется как метод хеширования.
 
-  
-   Веб-сервис 
 Например, UUID Generator создает версии 1 и 3, а также значения nil и GUID.
Ответ 6
Вы можете использовать этот код для генерации GUID.
 import java.util.concurrent.TimeUnit;
import org.apache.log4j.Logger;
public class StrictMicroSecondTimeBasedGuid
{
    private final static Logger logger = Logger
            .getLogger(StrictMicroSecondTimeBasedGuid.class);
    private static final long MICRO_IN_MILL = 1000;
    private static final long NANO_IN_MICRO = 1000;
    private static long baseNanoTime;
    private static long baseTimeInMicro;
    private static long lastGuid;
    static
    {
        /*
         * Nanosecond time reference is not known, therfore following logic is
         * needed to calculate time in micro without knowing refrence point of
         * nano time*
         */
        baseNanoTime = System.nanoTime();
        baseTimeInMicro = System.currentTimeMillis() * MICRO_IN_MILL;
        lastGuid = baseTimeInMicro;
    }
    public static synchronized Long newGuid()
    {
        long newGuid;
        while ((newGuid = calNewTimeInMicro()) <= lastGuid)
        {
            /** we have to check for this log, we don't want to see log. */
            logger.debug("wait of 10-microsecond is introduced to get new guid");
            try
            {
                TimeUnit.MICROSECONDS.sleep(10);
            } catch (InterruptedException e)
            {
                logger.error("Error", e);
            }
        }
        lastGuid = newGuid;
        return newGuid;
    }
    private static long calNewTimeInMicro()
    {
        return baseTimeInMicro
                + ((System.nanoTime() - baseNanoTime) / NANO_IN_MICRO);
    }
}
