`

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 提供通用唯一识别码(universally unique identifier)(UUID)实现

    java 提供通用唯一识别码(universally unique identifier)(UUID)实现 java 提供通用唯一识别码(universally unique identifier)(UUID)实现 java 提供通用唯一识别码(universally unique identifier)(UUID...

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

    ### UUID SPEC (Universally Unique Identifier (UUID) URN Namespace) #### 概述 UUID(Universally Unique Identifier),即通用唯一标识符,是一种128位的数字标识符,旨在跨空间和时间保证其唯一性。UUID最初...

    浅谈java获取UUID与UUID的校验

    Java 获取 UUID 是一个非常常见的操作,UUID(Universally Unique Identifier,全球唯一标识符)是一种软件建筑中用于标识信息的标识符。UUID 的主要用途是为了在分布式系统中生成唯一的标识符,以便于标识一些信息...

    uuid.rar_C获得UUID_UUID C_c生成uuid_c语言生成uuid_uuid

    UUID,全称Universally Unique Identifier,是一种用于标识信息的字符串,具有全球唯一性。在C语言环境下生成UUID,主要是为了在分布式系统或者网络环境中为数据对象分配一个全局唯一的标识符。UUID由128位数字组成...

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

    Java中的UUID(Universally Unique Identifier)是一种用于生成全局唯一标识符的标准,由开源软件基金会(OSF)在分布式计算环境中提出。UUID的主要目的是确保在分布式系统中的任何元素都有其独特的识别信息,无需...

    jdk与javauuidgenerator生成uuid

    UUID,全称Universally Unique Identifier,是用于唯一标识信息的128位数字。在Java中,UUID提供了标准的方法来生成全局唯一的标识符。UUID主要由三部分组成:时间戳、随机数和节点ID,这确保了其在全球范围内的唯一...

    PB生成UUID.zip

    标题中的"PB生成UUID"指的是在编程中使用Protocol Buffers(简称PB)生成Universally Unique Identifier(UUID)。UUID是一个128位的数字,通常表示为32个十六进制数字,用于唯一标识网络中的对象。它在分布式系统、...

    java生成UUID通用唯一识别码[参照].pdf

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

    Java 生成 UUID通用唯一标识符.docx

    UUID,即通用唯一标识符(Universally Unique Identifier),是一种用于生成全球唯一标识的标准化机制,其目的是确保在分布式系统环境中创建的每个实体都有一个不可重复的标识。在Java中,UUID由java.util包下的UUID...

    java生成UUID通用唯一识别码 中文WORD版

    UUID,全称Universally Unique Identifier,是通用唯一识别码的缩写,是一种在不考虑时间空间等外在因素的情况下,能够在全球范围内生成不重复的标识符的技术。在Java中,UUID类提供了生成UUID的能力,这对于分布式...

    javaScript动态随即生成UUID

    UUID,全称Universally Unique Identifier,即通用唯一识别码,是由一组128位数字组成的数字序列,通常被表示为32个十六进制数,分为5组,用连字符分隔,形式如:`8b1a9953-cf4c-45da-8e57-fb8d77662680`。...

    java UUID16的生成下载

    UUID,全称Universally Unique Identifier,是全局唯一标识符的意思,它在Java中被广泛用于创建唯一的对象标识。UUID16通常指的是一个特定版本的UUID,即UUID版本1(Version 1)。在Java中,UUID类提供了生成不同...

    java 生成32位UUID

    在Java编程中,UUID(Universally Unique Identifier)是一种用于生成全局唯一标识符的标准。一个UUID由32个16进制数字组成,通常分为五段,用短横线分隔,形如`8-4-4-4-12`的36个字符。在32位UUID中,我们实际上是...

    Android生成唯一标识符UUID(完全替代IMEI)

    UUID(Universally Unique Identifier)是一种全球唯一的标识符,它是由128位数字组成的。在Android中,我们可以使用Java的`java.util.UUID`类来生成UUID。这个类提供了`randomUUID()`方法,它会生成一个基于当前...

    java实现随机生成UUID

    UUID,全称Universally Unique Identifier,是一种为信息提供全局唯一标识的标准。在Java中,UUID是由java.util.UUID类提供的,可以生成两种类型的UUID:时间戳基的UUID和名称基的UUID。 时间戳基的UUID是基于当前...

    sql生成uuid

    在IT领域,尤其是在数据库操作与数据管理中,UUID(Universally Unique Identifier,通用唯一标识符)扮演着极其重要的角色。UUID是一种用于标识信息的128位数字标准,被广泛应用于分布式网络环境中,确保每一条数据...

    利用雪花算法生成uuid

    UUID,全称Universally Unique Identifier,即全局唯一标识符,是一种在分布式系统中用来生成唯一标识的机制。在大数据和云计算环境中,为了确保每个数据实体的唯一性,UUID扮演着至关重要的角色。雪花算法...

    javascript生成uuid的js库文件

    UUID(Universally Unique Identifier)是用于唯一标识信息的一种标准格式,通常由32个十六进制数字组成,分为五组,用短横线分隔。在JavaScript中,生成UUID的需求时常出现,例如在生成临时ID、数据库记录的主键...

Global site tag (gtag.js) - Google Analytics