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的唯一缺陷在于生成的结果串会比较长

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏大内老A

我所理解的Remoting(3):创建CAO Service Factory使接口和实现相互分离

我们知道对于Remoting,有两种不同的Activation模式:Server Activation和Client Activation。他我在前面的系列文章...

1986
来自专栏开发 & 算法杂谈

Hiredis源码阅读(一)

Hiredis库主要包含三类API:同步api、异步api以及回复解析api。首先介绍一下同步api以及回复解析api。

56911
来自专栏分布式系统和大数据处理

Command模式入门

提起Command模式,我想没有什么比遥控器的例子更能说明问题了,本文将通过它来一步步实现GOF的Command模式。

1082
来自专栏Unity

检测Unity客户端无效的预设资源

4、不被代码间接引用,如预设Anniver_01,在代码中是"Anniver_"+number,这种暂时没有好办法解决。

2674
来自专栏老付的网络博客

HaspMap的原理

前几天有想法弄懂HashMap的实现的原理,我自己也YY了一个想法去实现一个简单的Map, 代码如下:

1061
来自专栏名山丶深处

springboot集成jpa

2635
来自专栏偏前端工程师的驿站

JS魔法堂:Data URI Scheme介绍

一、前言                                   上周五公司内部的Any Topic Conf.上我和同事们分享了这个主题,有同事说...

2237
来自专栏向治洪

android 的android httpClient详解

AndroidHttpClient结构: public final class AndroidHttpClient extends Object imple...

2225
来自专栏Java架构师学习

带你深入了解Java线程中的那些事

引言 说到Thread大家都很熟悉,我们平常写并发代码的时候都会接触到,那么我们来看看下面这段代码是如何初始化以及执行的呢? public class Thre...

3358
来自专栏名山丶深处

springboot集成jpa

1677

扫码关注云+社区

领取腾讯云代金券