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