前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >java开发_UUID(Universally Unique Identifier,全局唯一标识符)和GUID(Globally Unique Identifier,全球唯一标识符)

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

作者头像
Hongten
发布2018-09-13 16:08:02
1.1K0
发布2018-09-13 16:08:02
举报
文章被收录于专栏:HongtenHongten

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

所以GUID就是UUID。

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

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

下面是一个demo:

代码语言:javascript
复制
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);
    }
}

输出结果:

代码语言:javascript
复制
1 fd61384b-05a5-4030-885e-a6bd3b60ef1a

下面是去除UUID中的"-"

代码语言:javascript
复制
 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 }

输出结果:

代码语言:javascript
复制
 1 /**
 2 ca31b9c6bff04ecfb5dfd1675905338d
 3 78af094061c04fc6b578a0f62aa09373
 4 51f228083c6e4dcb855a8e733efded7c
 5 fceca14fdc194d889c05c1dcf8ccaf3b
 6 4c7695ed08494b978fa9737dfe36f6a5
 7 b7573dbadfe84ba2b3659d1e49f8bf08
 8 f4391ba40f114ad19711a507971a994b
 9 6e1d576301c749bcb7b7943c1782a920
10 fb60bd4fe28d47c3975bb0eb6834e84e
11 5238ba7d27c7452698e075f64472fadf
12 */

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

代码语言:javascript
复制
 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的唯一缺陷在于生成的结果串会比较长

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2012-11-08 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档