Answers:
看一下与Java 5及更高版本捆绑在一起的UUID类。
例如:
java.util.UUID.randomUUID();
UUID.randomUUID
方法有可能返回重复项,但这根本不是现实问题。Oracle / OpenJDK实现使用加密强度高的随机数生成器。鉴于此,并且考虑到UUID中这么多位给出的天文范围,您可以在应用程序中生成数百万个这样的值,并且仍然可以保持良好的睡眠状态。由于使用“空间和时间”,[1] MAC地址或名称以及[2]当前日期时间作为约束,因此使用其他变体中的一个可以进一步减少冲突的可能性,甚至更接近于零。
while
直到获得不在列表中的ID即可:p
这取决于您想要哪种UUID。
标准Java UUID
类生成版本4(随机)的UUID。(更新 - 版本3(名称)UUID也可以生成。)它也可以处理其他变体,尽管它不能生成它们。(在这种情况下,“句柄”表示构造UUID
从实例long
,byte[]
或String
表示,以及提供一些适当的存取器。)
在Java的UUID生成器(士) “所界定的所有3‘官方’类型UUID的实施声称支持RFC-4122 ” ......尽管RFC实际上定义了4种类型,并提到第5类型。
有关UUID类型和变体的更多信息,请参阅Wikipedia中的摘要,详细内容请参见RFC 4122。和其他规范。
UUID.nameUUIDFromBytes(byte[] name)
public static UUID nameUUIDFromBytes(byte[] name)
。用于4型public static UUID randomUUID()
。JDK类不提供类型1。
clockSequence()
仅以一个例子扩展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() );
}
}
如果要使用其他版本的UUID,一种途径是让Java应用程序到达JVM之外,以通过调用以下命令来生成UUID:
uuidgen
在Mac OS X,BSD和Linux中可以找到。uuid-ossp
扩展通常与Postgres捆绑在一起。该扩展可以生成版本1、3和4的值,以及其他几个变体:
uuid_generate_v1mc()
–生成版本1 UUID,但使用随机多播MAC地址而不是计算机的实际MAC地址。uuid_generate_v5(namespace uuid, name text)
–生成版本5 UUID,该版本与版本3 UUID相似,只是SHA-1被用作哈希方法。