java开发_UUID(Universally Unique Identifier,全局唯一标识符)和GUID(Globally Unique Identifier,全球唯一标识符)

GUID: 即Globally Unique Identifier(全球唯一标识符) 也称作 UUID(Universally Unique IDentifier) 。

所以GUID就是UUID。

GUID是一个128位长的数字,一般用16进制表示。算法的核心思想是结合机器的网卡、当地时间、一个随即数来生成GUID。

从理论上讲,如果一台机器每秒产生10000000个GUID,则可以保证(概率意义上)3240年不重复。

下面是一个demo:

package com.mytest;

import java.util.UUID;
/**
  * JDK1.5以上
  *
  */
public class UUIDTest {
    public static void main(String[] args) {
        UUID uuid = UUID.randomUUID();
        System.out.println(uuid);
    }
}

输出结果:

1 fd61384b-05a5-4030-885e-a6bd3b60ef1a

下面是去除UUID中的"-"

 

 1 /**
 2  * 
 3  */
 4 package com.b510;
 5 
 6 import java.util.UUID;
 7 
 8 /**
 9  * @date 2012-11-7
10  * @author xhw
11  * 
12  */
13 public class UUIDTest {
14     /**
15      * 获得一个去掉"-"符号的UUID
16      * 
17      * @return String UUID
18      */
19     public static String getUUID() {
20         String s = UUID.randomUUID().toString();
21         // 去掉"-"符号
22         return s.substring(0, 8) + s.substring(9, 13) + s.substring(14, 18) + s.substring(19, 23) + s.substring(24);
23     }
24 
25     /**
26      * 获得一个去掉"-"符号的UUID
27      * 
28      * @return
29      */
30     public static String getUuid() {
31         String s = UUID.randomUUID().toString();
32         // 去掉"-"符号
33         return s.replace("-", "");
34     }
35 
36     /**
37      * 获得指定数目的UUID
38      * 
39      * @param number
40      *            int 需要获得的UUID数量
41      * @return String[] UUID数组
42      */
43     public static String[] getUUID(int number) {
44         if (number < 1) {
45             return null;
46         }
47         String[] ss = new String[number];
48         for (int i = 0; i < number; i++) {
49             if (i % 2 == 0) {
50                 ss[i] = getUuid();
51             } else {
52                 ss[i] = getUUID();
53             }
54         }
55         return ss;
56     }
57 
58     public static void main(String[] args) {
59         String[] ss = getUUID(10);
60         for (int i = 0; i < ss.length; i++) {
61             System.out.println(ss[i]);
62         }
63     }
64 
65 }

输出结果:

 1 /**
 2 ca31b9c6bff04ecfb5dfd1675905338d
 3 78af094061c04fc6b578a0f62aa09373
 4 51f228083c6e4dcb855a8e733efded7c
 5 fceca14fdc194d889c05c1dcf8ccaf3b
 6 4c7695ed08494b978fa9737dfe36f6a5
 7 b7573dbadfe84ba2b3659d1e49f8bf08
 8 f4391ba40f114ad19711a507971a994b
 9 6e1d576301c749bcb7b7943c1782a920
10 fb60bd4fe28d47c3975bb0eb6834e84e
11 5238ba7d27c7452698e075f64472fadf
12 */

上面提供了两种方法,去除UUID中的"-"

 

 1 /**
 2      * 获得一个去掉"-"符号的UUID
 3      * 
 4      * @return String UUID
 5      */
 6     public static String getUUID() {
 7         String s = UUID.randomUUID().toString();
 8         // 去掉"-"符号
 9         return s.substring(0, 8) + s.substring(9, 13) + s.substring(14, 18) + s.substring(19, 23) + s.substring(24);
10     }
11 
12     /**
13      * 获得一个去掉"-"符号的UUID
14      * 
15      * @return
16      */
17     public static String getUuid() {
18         String s = UUID.randomUUID().toString();
19         // 去掉"-"符号
20         return s.replace("-", "");
21     }

 

UUID由以下几部分的组合:

  (1)当前日期和时间,UUID的第一个部分与时间有关,如果你在生成一个UUID之后,过几秒又生成一个UUID,则第一个部分不同,其余相同

  (2)时钟序列

  (3)全局唯一的IEEE机器识别号,如果有网卡,从网卡MAC地址获得,没有网卡以其他方式获得

缺点:UUID的唯一缺陷在于生成的结果串会比较长

posted @ 2012-11-08 16:12  Hongten  阅读(8641)  评论(5编辑  收藏  举报
Fork me on GitHub