java中的uuid ,guid算法
import java.io.*;
import java.security.*;
public final class UUID
implements Serializable, Comparable
{
private UUID(byte abyte0[])
{
version = -1;
variant = -1;
timestamp = -1L;
sequence = -1;
node = -1L;
hashCode = -1;
long l = 0L;
long l1 = 0L;
// if(!$assertionsDisabled && abyte0.length != 16)
// throw new AssertionError();
for(int i = 0; i < 8; i++)
l = l << 8 | (long)(abyte0[i] & 0xff);
for(int j = 8; j < 16; j++)
l1 = l1 << 8 | (long)(abyte0[j] & 0xff);
mostSigBits = l;
leastSigBits = l1;
}
public UUID(long l, long l1)
{
version = -1;
variant = -1;
timestamp = -1L;
sequence = -1;
node = -1L;
hashCode = -1;
mostSigBits = l;
leastSigBits = l1;
}
public static UUID randomUUID()
{
SecureRandom securerandom = numberGenerator;
if(securerandom == null)
numberGenerator = securerandom = new SecureRandom();
byte abyte0[] = new byte[16];
securerandom.nextBytes(abyte0);
abyte0[6] &= 0xf;
abyte0[6] |= 0x40;
abyte0[8] &= 0x3f;
abyte0[8] |= 0x80;
UUID uuid = new UUID(abyte0);
return new UUID(abyte0);
}
public static UUID nameUUIDFromBytes(byte abyte0[])
{
MessageDigest messagedigest;
try
{
messagedigest = MessageDigest.getInstance("MD5");
}
catch(NoSuchAlgorithmException nosuchalgorithmexception)
{
throw new InternalError("MD5 not supported");
}
//juapk.com
byte abyte1[] = messagedigest.digest(abyte0);
abyte1[6] &= 0xf;
abyte1[6] |= 0x30;
abyte1[8] &= 0x3f;
abyte1[8] |= 0x80;
return new UUID(abyte1);
}
public static UUID fromString(String s)
{
String as[] = s.split("-");
if(as.length != 5)
throw new IllegalArgumentException((new StringBuilder())
.append("Invalid UUID string: ").append(s).toString());
for(int i = 0; i < 5; i++)
as[i] = (new StringBuilder()).append("0x").append(as[i]).toString();
long l = Long.decode(as[0]).longValue();
l <<= 16;
l |= Long.decode(as[1]).longValue();
l <<= 16;
l |= Long.decode(as[2]).longValue();
long l1 = Long.decode(as[3]).longValue();
l1 <<= 48;
l1 |= Long.decode(as[4]).longValue();
return new UUID(l, l1);
}
public long getLeastSignificantBits()
{
return leastSigBits;
}
public long getMostSignificantBits()
{
return mostSigBits;
}
public int version()
{
if(version < 0)
version = (int)(mostSigBits >> 12 & 15L);
return version;
}
public int variant()
{
if(variant < 0)
if(leastSigBits >>> 63 == 0L)
variant = 0;
else
if(leastSigBits >>> 62 == 2L)
variant = 2;
else
variant = (int)(leastSigBits >>> 61);
return variant;
}
public long timestamp()
{
if(version() != 1)
throw new UnsupportedOperationException("Not a time-based UUID");
long l = timestamp;
if(l < 0L)
{
l = (mostSigBits & 4095L) << 48;
l |= (mostSigBits >> 16 & 65535L) << 32;
l |= mostSigBits >>> 32;
timestamp = l;
}
return l;
}
public int clockSequence()
{
if(version() != 1)
throw new UnsupportedOperationException("Not a time-based UUID");
if(sequence < 0)
sequence = (int)((leastSigBits & 0x3fff000000000000L) >>> 48);
return sequence;
}
public long node()
{
if(version() != 1)
throw new UnsupportedOperationException("Not a time-based UUID");
if(node < 0L)
node = leastSigBits & 0xffffffffffffL;
return node;
}
public String toString()
{
return (new StringBuilder()).append(digits(mostSigBits >> 32, 8)).append("-").append(digits(mostSigBits >> 16, 4))
.append("-").append(digits(mostSigBits, 4)).append("-")
.append(digits(leastSigBits >> 48, 4)).append("-").append(digits(leastSigBits, 12)).toString();
}
private static String digits(long l, int i)
{
long l1 = 1L << i * 4;
return Long.toHexString(l1 | l & l1 - 1L).substring(1);
}
public int hashCode()
{
if(hashCode == -1)
hashCode = (int)(mostSigBits >> 32 ^ mostSigBits ^ leastSigBits >> 32 ^ leastSigBits);
return hashCode;
}
public boolean equals(Object obj)
{
if(!(obj instanceof UUID))
return false;
if(((UUID)obj).variant() != variant())
{
return false;
} else
{
UUID uuid = (UUID)obj;
return mostSigBits == uuid.mostSigBits && leastSigBits == uuid.leastSigBits;
}
}
public int compareTo(UUID uuid)
{
return mostSigBits >= uuid.mostSigBits ? mostSigBits <= uuid.mostSigBits ?
leastSigBits >= uuid.leastSigBits ?
((byte) (((byte)(leastSigBits <= uuid.leastSigBits ? 0 : 1)))) : -1 : 1 : -1;
}
private void readObject(ObjectInputStream objectinputstream)
throws IOException, ClassNotFoundException
{
objectinputstream.defaultReadObject();
version = -1;
variant = -1;
timestamp = -1L;
sequence = -1;
node = -1L;
hashCode = -1;
}
public int compareTo(Object obj)
{
return compareTo((UUID)obj);
}
private static final long serialVersionUID = 0xbc9903f7986d852fL;
private final long mostSigBits;
private final long leastSigBits;
private transient int version;
private transient int variant;
private volatile transient long timestamp;
private transient int sequence;
private transient long node;
private transient int hashCode;
private static volatile SecureRandom numberGenerator = null;
// static final boolean $assertionsDisabled = !UUID.desiredAssertionStatus();
}
直接调用里边方法就得到唯一的串了
分享到:
相关推荐
主要介绍了java获取UUID与UUID的校验,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
GUID(全局统一标识符)是指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的。生成算法用到了以太网卡地址、纳秒级时间、芯片ID码和许多可能的数字。
java-uuid-generator-3.1.3.jar 部分开源源代码用到这里面的类。
利用雪花算法生成uuid
java 生成8位UUID,解决UUID2太长的问题,欢迎下载。后续代码,陆续放出
COM组件uuid,GUID,CLSID,ProgID区别在哪儿.zip
CString CTestGetUUIDDlg::newGUID() { CString buf; GUID guid; if (S_OK == ::... , guid.Data4[2], guid.Data4[3], guid.Data4[4], guid.Data4[5] , guid.Data4[6], guid.Data4[7]); } return buf; }
公司实际项目中采用UUID算法生成主键的工具类,有需要的朋友们可以拿去
大家都知道.NET中有GUID 这个类型,保证每次生成的编号唯一,一般用来作为数据库的主键列使用。 Java里也有这个类型,他位于java.util中 是一个静态类UUID。 具体使用方法,详见附件下载。
Java生成UUID使用的第三方包,生成UUID的第三方包,
主要介绍了php中生成标准uuid(guid)的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
<groupId>com.fasterxml.uuid</groupId> <artifactId>java-uuid-generator <packaging>bundle <name>Java UUID Generator <version>3.1.5</version>
java构造函数雪花算法生成uuid,开始时间截、机器id所占的位数、数据标识id所占的位数、支持的最大机器id,结果是31 (这个移位算法可以很快的计算出几位二进制数所能表示的最大十进制数) 、支持的最大数据标识id,...
java UUID16的生成下载 UUID ,解压后生成的.java,可以在编译器中运行main方法
java生成唯一索引,Long型,区别uuid
java生成UUID通用唯一识别码 中文WORD版,感兴趣的小伙伴们可以下载来用下,代码可以直接使用
本文档主要讲述的是java生成UUID通用唯一识别码;UUID含义是通用唯一识别码 (Universally Unique Identifier),这 是一个软件建构的标准,也是被开源软件基金会 (Open Software Foundation, OSF) 的组织在分布式计算...
版本 3:UUID 是通过散列(MD5 作为散列算法)名字空间(namespace)标识符和名称生成的; 版本 4 - UUID 使用随机性或伪随机性生成; 版本 5 类似于版本 3(SHA1 作为散列算法)。 为了能兼容过去的 UUID,以及应对...
jdk与javauuidgenerator生成uuid
GUID是一个128位长的数字,一般用16进制表示。算法的核心思想是结合机器的网卡、当地时间、一个随即数来生成GUID。从理论上讲,如果一台机器每秒产生10000000个GUID,则可以保证(概率意义上)3240年不重复