`
javaG
  • 浏览: 549847 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Java生成UUID

阅读更多
UUID(Universally Unique Identifier)全局唯一标识符,是指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的。按照开放软件基金会(OSF)制定的标准计算,用到了以太网卡地址、纳秒级时间、芯片ID码和许多可能的数字。由以下几部分的组合:当前日期和时间(UUID的第一个部分与时间有关,如果你在生成一个UUID之后,过几秒又生成一个UUID,则第一个部分不同,其余相同),时钟序列,全局唯一的IEEE机器识别号(如果有网卡,从网卡获得,没有网卡以其他方式获得),UUID的唯一缺陷在于生成的结果串会比较长。 
在Java中生成UUID主要有以下几种方式: 

JDK1.5 
如果使用的JDK1.5的话,那么生成UUID变成了一件简单的事,以为JDK实现了UUID: 
java.util.UUID,直接调用即可. 
UUID uuid  =  UUID.randomUUID(); 
String s = UUID.randomUUID().toString(); 

UUID是由一个十六进制形式的数字组成,表现出来的形式例如 
550E8400-E29B-11D4-A716-446655440000   

//下面就是实现为数据库获取一个唯一的主键id的代码 
public class UUIDGenerator { 
    public UUIDGenerator() { 
    } 
    /** 
     * 获得一个UUID 
     * @return String UUID 
     */ 
    public static String getUUID(){ 
        String s = UUID.randomUUID().toString(); 
        //去掉“-”符号 
        return s.substring(0,8)+s.substring(9,13)+s.substring(14,18)+s.substring(19,23)+s.substring(24); 
    } 
    /** 
     * 获得指定数目的UUID 
     * @param number int 需要获得的UUID数量 
     * @return String[] UUID数组 
     */ 
    public static String[] getUUID(int number){ 
        if(number < 1){ 
            return null; 
        } 
        String[] ss = new String[number]; 
        for(int i=0;i<number;i++){ 
            ss[i] = getUUID(); 
        } 
        return ss; 
    } 
    public static void main(String[] args){ 
        String[] ss = getUUID(10); 
        for(int i=0;i<ss.length;i++){ 
            System.out.println(ss[i]); 
        } 
    } 
}   
分享到:
评论
8 楼 zgcy123456 2013-05-21  
zgcy123456 写道
谢谢,谢谢分享。对UUID有了一点了解。不过有个问题。
“UUID的第一个部分与时间有关,如果你在生成一个UUID之后,过几秒又生成一个UUID,则第一个部分不同,其余相同”
对楼主这句也有疑问啊,我们数据库中的记录第一位有字母的,eg:b9ef3092025e46acb1ba5d10fb91f53d,这怎么和时间有关,求解。

搞错了,一般用16进制表示
7 楼 zgcy123456 2013-05-21  
谢谢,谢谢分享。对UUID有了一点了解。不过有个问题。
“UUID的第一个部分与时间有关,如果你在生成一个UUID之后,过几秒又生成一个UUID,则第一个部分不同,其余相同”
对楼主这句也有疑问啊,我们数据库中的记录第一位有字母的,eg:b9ef3092025e46acb1ba5d10fb91f53d,这怎么和时间有关,求解。
6 楼 伊人水立方 2011-10-13  
是16进制的数,有36位。
5 楼 yaolifei 2011-08-24  
public static void main(String[] args) {
		System.out.println(UUID.randomUUID());
		System.out.println(UUID.randomUUID());
		System.out.println(UUID.randomUUID());
		System.out.println(UUID.randomUUID());
	}

结果:
90bfe8b2-4304-4fa2-85c7-e13fbece4a8b
fe273347-51cb-4fca-aaa9-c260cf43d5ae
961a0755-f30d-4cf7-bc5e-33682e222acb
1adff5b3-1a9f-47ce-bb3e-a28c90d7d9bd

没有你说的只有前面部分不同 后面相同
4 楼 66914050 2010-05-21  
zhiweiv 写道
为什么不这样?
String s=UUID.randomUUID().toString().replaceAll("-", "");


同问...字符串相加效率低啊...
3 楼 zhiweiv 2009-04-14  
为什么不这样?
String s=UUID.randomUUID().toString().replaceAll("-", "");

2 楼 jbeduhai 2008-10-21  
谢谢楼主,很实用
1 楼 jy786394 2008-04-17  
谢谢楼主,很实用

相关推荐

Global site tag (gtag.js) - Google Analytics