`

Java生成UUID(Universally Unique Identifier)

阅读更多
 UUID(Universally Unique Identifier)全局唯一标识符,是指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的。按照开放软件基金会(OSF)制定的标准计算,用到了以太网卡地址、纳秒级时间、芯片ID码和许多可能的数字。由以下几部分的组合:当前日期和时间(UUID的第一个部分与时间有关,如果你在生成一个UUID之后,过几秒又生成一个UUID,则第一个部分不同,其余相同),时钟序列,全局唯一的IEEE机器识别号(如果有网卡,从网卡获得,没有网卡以其他方式获得),UUID的唯一缺陷在于生成的结果串会比较长。

在Java中生成UUID主要有以下几种方式:

1. JDK1.5
如果使用的JDK1.5的话,那么生成UUID变成了一件简单的事,以为JDK实现了UUID: java.util.UUID,直接调用即可.
UUID uuid = UUID.randomUUID();

2. 第三方开源类库(推荐使用):
最著名的是 JUG.特点上是: 纯Java实现,开源,LGPL协议。采用了Native的方式产生真正的Uuid.而且提供了不同平台的实现,包括:
  • Linux / x86
  • Windows (98, ME, NT, 2K, XP?) / x86
  • Solaris / Sparc
  • Mac OS X
  • FreeBSD / x86
import org.doomdark.uuid.UUID;
import org.doomdark.uuid.UUIDGenerator;

UUIDGenerator generator 
= UUIDGenerator.getInstance();
UUID uuid 
= generator.generateRandomBasedUUID();

3. Java代码实现:
如果你使用JDK1.4或以前版本,又不想加入第三方的类库的话,下面提供了一个纯Java的UUID实现. 不过需要注意的是:这里产生的可能不是真正的UUID,只不过重复的机会少一些而已
import java.net.InetAddress;
import java.net.UnknownHostException;

/** *//**
 * UUID(Univeral Unique Identity)类
 * 


 * Title: 生成唯一编码
 * 


 * 


 * Description: 源自于w3c.org <</font>

http://源自于w3c.org>
 * 
 * 


 * Copyright: Copyright (c) 2001-2004
 * 


 * 
 * 
@version 1.0
 
*/

public final class UUID {

    
/** *//**
     * 
@serial Integer that helps create a unique UID.
     
*/

    
private int unique;

    
/** *//**
     * 
@serial Long used to record the time. The time will be
     *         used to create a unique UID.
     
*/

    
private long time;

    
/** *//**
     * InetAddress to make the UID globally unique
     
*/

    
private static String address;

    
/** *//**
     * a random number
     
*/

    
private static int hostUnique;

    
/** *//**
     * Used for synchronization
     
*/

    
private static Object mutex;

    
private static long lastTime;

    
private static long DELAY;

    
private static String generateNoNetworkID() {
        Thread current 
= Thread.currentThread();
        String nid 
= current.activeCount() + System.getProperty("os.version")
                
+ System.getProperty("user.name ")
                
+ System.getProperty("java.version");
        System.out.println(
"netWorkId =" + nid);
        MD5 md5 
= new MD5(nid);
        md5.processString();
        
return md5.getStringDigest();
    }


    
static {
        hostUnique 
= (new Object()).hashCode();
        mutex 
= new Object();
        lastTime 
= System.currentTimeMillis();
        DELAY 
= 10// in milliseconds
        try {
            String s 
= InetAddress.getLocalHost().getHostAddress();
            MD5 md5 
= new MD5(s);
            md5.processString();
            address 
= md5.getStringDigest();
        }
 catch (UnknownHostException ex) {
            address 
= generateNoNetworkID();
        }

    }


    
public UUID() {
        
synchronized (mutex) {
            
boolean done = false;
            
while (!done) {
                time 
= System.currentTimeMillis();
                
if (time  lastTime + DELAY) {
                    
// pause for a second to wait for time to change
                    try {
                        Thread.currentThread().sleep(DELAY);
                    }
 catch (java.lang.InterruptedException e) {
                    }
 // ignore exception
                    continue;
                }
 else {
                    lastTime 
= time;
                    done 
= true;
                }

            }

            unique 
= hostUnique;
        }

    }


    
public String toString() {
        
return Integer.toString(unique, 16+ Long.toString(time, 16+ address;
    }


    
public boolean equals(Object obj) {
        
if ((obj != null&& (obj instanceof UUID)) {
            UUID uuid 
= (UUID) obj;
            
return (unique == uuid.unique && time == uuid.time && address
                    .equals(uuid.address));
        }
 else {
            
return false;
        }

    }


    
public static void main(String args[]) {
        System.out.println(
new UUID());
        System.out.println(
new UUID());
        System.out.println(
new UUID());
        
long start = System.currentTimeMillis();
        System.out.println(
new UUID());
        
long end = System.currentTimeMillis();
        System.out.println((end 
- start));
        System.out.println(
new UUID().toString().length());
    }


    
/** *//**
     * 返回最新的UUID号码
     * 
     * 
@return String UUID,长50位
     * 
     
*/

    
public final static String getUUID() {
        UUID uid 
= new UUID();
        
return uid.toString();
    }

}

其中使用到MD5加密算法,实现代码如下:
分享到:
评论
2 楼 adamgame 2011-08-15  
  
1 楼 adamgame 2011-08-15  
:D
jjjj

相关推荐

    java生成UUID通用唯一识别码.docx

    UUID含义是通用唯一识别码 (Universally Unique Identifier),这 是一个软件建构的标准,也是被开源软件基金会 (Open Software Foundation, OSF) 的组织在分布式计算环境 (Distributed Computing Environment, DCE) ...

    UUID SPEC (Universally Unique IDentifier (UUID) URN Namespace)

    Industry SPEC about how to calculate UUID and format.

    获取设备唯一标识符UUID

    读取设备的UUID(Universally Unique Identifier)并通过KeyChain记录。

    UUID全局唯一标识符

    UUID(Universally Unique Identifier)全局唯一标识符,是指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的。按照开放软件基金会(OSF)制定的标准计算,用到了以太网卡地址、纳秒级时间、芯片ID码...

    Javascript生成全局唯一标识符(GUID,UUID)的方法

    全局唯一标识符(GUID,Globally Unique Identifier)也称作 UUID(Universally Unique IDentifier) 。 GUID是一种由算法生成的二进制长度为128位的数字标识符。GUID 的格式为“xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx...

    PHP中生成UUID自定义函数分享

    UUID 全称是 Universally unique identifier,它是一种识别符,使用任意的计算机都可以生成,不需要一个中央数据库进行管理,即可以保证几乎没有重复的几率。而 UUID 的值域之大,据说给世界上每一粒沙子分配一个 ...

    guid生成工具

    用于生成机器的GUID,全局唯一标识符(GUID,Globally Unique Identifier)也称作 UUID(Universally Unique IDentifier) 。GUID是一种由算法生成的二进制长度为128位的数字标识符。

    Python UUID模块介绍及基本使用.docx

    UUID 是 通用唯一识别码(Universally Unique Identifier)的缩写 目的,是让分布式系统中的所有元素,都能有唯一的辨识信息 不需要通过中央控制端来做辨识信息的指定 场景: 不需考虑数据库创建时的名称...

    python生成并处理uuid的实现方式

    UUID(Universally Unique Identifier)是通用唯一识别码,在许多领域用作标识,比如我们常用的数据库也可以用它来作为主键,原理上它是可以对任何东西进行唯一的编码的。 作为新手一看到类似varchar(40)这样的主键...

    使用Ruby on Rails和PostgreSQL自动生成UUID的教程

    Rails 4 能原生态的支持Postgres 中的UUID(Universally Unique Identifier,可通用的唯一标识符)类型。在此,我将向你描述如何在不用手工修改任何Rails代码的情况下,用它来生成UUID。 首先,你需要激活Postgres的...

    UUID完全解析.txt

    UUID含义是通用唯一识别码 (Universally Unique Identifier),这 是一个软件建构的标准,也是被开源软件基金会 (Open Software Foundation, OSF) 的组织在分布式计算环境 (Distributed Computing Environment, DCE) ...

    ThinkPad Hardware Maintenance Diskette 1.76&1.75(HMD)

    作为蓝快配件的thinkpad主板是没有写入UUID(The Universally Unique Identifier,通用唯一识别信息)与机器型号的,这样我们就不能使用System update进行自动升级,许多软件也无法安装;HDM就是蓝快工作人员用来写入...

    Python用UUID库生成唯一ID的方法示例

    它可以保证时间和空间的唯一性,也称为GUID,全称为:UUID —— Universally Unique IDentifier,Python 中叫 UUID。 它通过MAC地址、时间戳、命名空间、随机数、伪随机数来保证生成ID的唯一性。 UUID主要有五个...

    quuid.rar_class A

    The QUuid class stores a Universally Unique Identifier (UUID) for Linux.

    KeyChainUUID-master.zip

    相信大家也有和我一样为了获取 iOS的UUID(Universally Unique Identifier) 而苦恼的,现在你有了。 每次获取的uuid都是和上次一样的,即使是app卸载了重新安装,,希望能够帮助到大家...

    JavaScript生成GUID的多种算法小结

    全局唯一标识符(GUID,Globally Unique Identifier)也称作 UUID(Universally Unique IDentifier) 。 GUID是一种由算法生成的二进制长度为128位的数字标识符。GUID 的格式为“xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx...

    [示例][PHP]生成UUIDs的PHP库.zip

    UUID 是 通用唯一识别码(Universally Unique Identifier)的缩写,是一种软件建构的标准,亦为开放软件基金会组织在分布式计算环境领域的一部分。其目的,是让分布式系统中的所有元素,都能有唯一的辨识信息,而不...

    php生成局部唯一识别码LUID的代码

    UUID(Universally Unique Identifier),GUID都是希望在整个时空范围内能产生唯一识别码,这在分布式计算环境下是必要的. 然而,如果仅仅是想在一个受限定的局部环境下,想生成一个”局部唯一识别码”,使用UUID就是杀鸡用...

    IBM ThinkPad Hardware Maintenant Diskette(HMD) ver1.74

    蓝快备件自然是质量没话说,不过如果不巧主板是蓝快备件,就有一点小小的麻烦:大家也都知道,作为蓝快配件的主板是没有写入UUID(The Universally Unique Identifier,通用唯一识别信息)与机器型号的,这样我们就不...

Global site tag (gtag.js) - Google Analytics