java objectguid_怎样用java生成GUID与UUID

GUID是一个128位长的数字,一般用16进制表示。算法的核心思想是结合机器的网卡、当地时间、一个随机数来生成GUID。从理论上讲,如果一台机器每秒产生10000000个GUID,则可以保证(概率意义上)3240年不重复。

UUID是1.5中新增的一个类,在java.util下,用它可以产生一个号称全球唯一的ID

import java.util.UUID;

public class Test {

public static void main(String[] args) {

UUID uuid = UUID.randomUUID();

System.out.println (uuid);

}

}

编译运行输出:

07ca3dec-b674-41d0-af9e-9c37583b08bb

两种方式生成guid 与uuid

需要comm log 库

import java.net.InetAddress;

import java.net.UnknownHostException;

import java.security.MessageDigest;

import java.security.NoSuchAlgorithmException;

import java.security.SecureRandom;

import java.util.Random;

public class RandomGUID extends Object {

protected final org.apache.commons.logging.Log logger = org.apache.commons.logging.LogFactory

.getLog(getClass());

public String valueBeforeMD5 = "";

public String valueAfterMD5 = "";

private static Random myRand;

private static SecureRandom mySecureRand;

private static String s_id;

private static final int PAD_BELOW = 0x10;

private static final int TWO_BYTES = 0xFF;

static {

mySecureRand = new SecureRandom();

long secureInitializer = mySecureRand.nextLong();

myRand = new Random(secureInitializer);

try {

s_id = InetAddress.getLocalHost().toString();

} catch (UnknownHostException e) {

e.printStackTrace();

}

}

public RandomGUID() {

getRandomGUID(false);

}

public RandomGUID(boolean secure) {

getRandomGUID(secure);

}

private void getRandomGUID(boolean secure) {

MessageDigest md5 = null;

StringBuffer sbValueBeforeMD5 = new StringBuffer(128);

try {

md5 = MessageDigest.getInstance("MD5");

} catch (NoSuchAlgorithmException e) {

logger.error("Error: " + e);

}

try {

long time = System.currentTimeMillis();

long rand = 0;

if (secure) {

rand = mySecureRand.nextLong();

} else {

rand = myRand.nextLong();

}

sbValueBeforeMD5.append(s_id);

sbValueBeforeMD5.append(":");

sbValueBeforeMD5.append(Long.toString(time));

sbValueBeforeMD5.append(":");

sbValueBeforeMD5.append(Long.toString(rand));

valueBeforeMD5 = sbValueBeforeMD5.toString();

md5.update(valueBeforeMD5.getBytes());

byte[] array = md5.digest();

StringBuffer sb = new StringBuffer(32);

for (int j = 0; j 

int b = array[j] & TWO_BYTES;

if (b 

sb.append('0');

sb.append(Integer.toHexString(b));

}

valueAfterMD5 = sb.toString();

} catch (Exception e) {

logger.error("Error:" + e);

}

}

public String toString() {

String raw = valueAfterMD5.toUpperCase();

StringBuffer sb = new StringBuffer(64);

sb.append(raw.substring(0, 8));

sb.append("-");

sb.append(raw.substring(8, 12));

sb.append("-");

sb.append(raw.substring(12, 16));

sb.append("-");

sb.append(raw.substring(16, 20));

sb.append("-");

sb.append(raw.substring(20));

return sb.toString();

}

// Demonstraton and self test of class

public static void main(String args[]) {

for (int i=0; i

RandomGUID myGUID = new RandomGUID();

System.out.println("Seeding String=" + myGUID.valueBeforeMD5);

System.out.println("rawGUID=" + myGUID.valueAfterMD5);

System.out.println("RandomGUID=" + myGUID.toString());

}

}

}

同样

UUID uuid = UUID.randomUUID();

System.out.println("{"+uuid.toString()+"}");

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

表情包
插入表情
评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符
相关推荐
©️2020 CSDN 皮肤主题: 游动-白 设计师:白松林 返回首页