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的唯一缺陷在於生成的結果串會比較長


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM