在Java中创建一个GUID

在Java中创建GUID的最佳方式有哪些?

对该问题的评论 (1)

java.util.UUID.randomUUID();

评论(5)
解决办法

请看一下捆绑在Java 5及以后版本中的UUID类

比如说。

  • 如果你想要一个随机的UUID,你可以使用randomUUID方法。
  • 如果你想要一个UUID初始化为一个特定的值,你可以使用UUID构造函数fromString方法。
评论(3)

这取决于你想要什么样的UUID

  • 标准的Java UUID 类会生成版本4(随机)UUID。 (更新 - 版本3 (名称)UUIDs也可以被生成。)它也可以处理其他变体,尽管它不能生成它们。 (在这种情况下,"handle"意味着从long, byte[]String 表示中构建UID实例,并提供一些适当的访问器。)

  • Java UUID Generator (JUG)]7 实现声称支持RFC-4122定义的所有3种UUID类型...尽管RFC实际上定义了4种类型并提到了第5种类型。

关于UUID类型和变体的更多信息,在Wikipedia中有一个很好的总结,而血腥的细节在RFC 4122和其他规范中。

评论(4)

只是用一个例子来扩展Mark Byers'的答案。

import java.util.UUID;

public class RandomStringUUID {
    public static void main(String[] args) {
        UUID uuid = UUID.randomUUID();
        System.out.println("UUID=" + uuid.toString() );
    }
}
评论(0)

其他答案都是正确的,尤其是Stephen C这个

Reaching Outside Java

出于安全考虑,在Java内生成UUID][1]值仅限于第4版(随机)

如果你想要其他版本的UUID,一个途径是让你的Java应用程序到达[JVM][3]之外,通过调用来生成UUID。

  • 命令行实用程序
    几乎每个操作系统都捆绑了<br /&gt。 例如,在Mac OS X、BSD和Linux中找到的[uuidgen][4]。
  • 数据库服务器
    使用[JDBC][5]来检索数据库服务器上生成的UUID.
    例如,[uuid-ossp`][6]扩展经常与[Postgres][7]捆绑在一起。 该扩展可以生成版本1、3、4的值,另外还有一些变化。
  • uuid_generate_v1mc() - 生成版本1的UUID,但使用随机的多播MAC地址代替计算机的真实MAC地址。
  • uuid_generate_v5(namespace uuid, name text) - 生成版本5的UUID,除了使用SHA-1作为散列方法外,它的工作原理与版本3的UUID相同。
  • Web服务
    例如,UUID生成器可以创建版本1& 3以及无值GUID

[1]: http://docs.oracle.com/javase/8/docs/api/java/util/UUID.html#randomUUID-- 2:

[3]: https://www.google.com/url?sa=t&rc=j&q=&esrc=s&source=web&cd=2&cad=rja&uact=8&ved=0CCIQFjABahUKEwj1jKa_zuDGAhXEEpIKHYwoAQw&url=https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FJava_virtual_machine&ei=kCSoVfWEDcSlyASM0YRg&usg=AFQjCNE6RcWP8IuAXecy2dIl9NayBO_iBg&sig2=0JkiHdYJ1SDk7s65x8N-vA&bvm=bv.97949915,d.aWw。 [4]: http://www.freebsd.org/cgi/man.cgi?query=uuidgen&sektion=1 [5]: [5]:https://en.wikipedia.org/wiki/Java_Database_Connectivity [6]: http://www.postgresql.org/docs/current/static/uuid-ossp.html [7]: http://www.postgresql.org/ 8:

9:

评论(1)

您可以使用这段代码来生成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's 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()) 
评论(0)