java对uuid的处理

java对uuid的处理
2007-08-15 11:48
uuid和guid都是全球唯一标识符的说法,guid看起来并不是国际标准,所以,uuid实际上是更加通用的说法。uuid和guid都是16个字节(128位的)。故这里只谈论uuid。
首先,建议大家看看:http://www.answers.com/topic/uuid?cat=technology,然后看看:http://www.answers.com/topic/uuid?cat=technology。前者是说uuid的,后者是说guid的。之所以要2个都看是因为uuid里面的说明没有说明完整,而guid里面的说明可以对它进行适当的补充。
总而言之,uuid的形式是:4-2-2-2-6,共4+2+2+2+6=16个字节。比如,550e8400-e29b-41d4-a716-446655440000 。其中,第3部分的第一个字节(即总体上的第7个字节)的高4位用来表示uuid的version类型。version表明了uuid的算法版本,目前有如下几种:
1,version1:version1是第一次提出来的算法,算法使用了唯一硬件地址(比如,网卡啊,cpu编号啊)+精确到100纳秒的时间,还有其他的一些数据来产生结果。可是,它被广泛的抵制了,因为根据uuid可以很容易的查到是那台电脑构建的(因为网卡地址唯一)。传闻说有一次网络攻击行为就是被这种方式给追踪到黑客的。
2,version3:第3版本的算法(很奇怪的是居然没有第2版本的算法),这个算法十分简单,就是使用md5算法hash一个唯一url地址。保证uuid的唯一需要你自己保证url地址的唯一。
3,version4:第4版本的算法,这个算法也很容易理解,它是直接使用一个随机数来构建uuid。随机数如何构建由自己决定。
4,version5:第5版本的算法,这个算法和第3版本的算法几乎一样,唯一不同的是它使用了sha-1算法代替md5算法来进行hash。

以上就是uuid的标准了。个人认为除了第1个算法以外,其他几个算法都不能够保证唯一性的。

从java5.0开始,sun提供了对uuid的支持(即java.util.Uuid类)。目前UUID类只提供了根据md5和根据随机数来构建uuid的算法(即第3和第4个版本的算法)。这里我比较迷惑不解,因为jdk6.0里面已经提供了一个新的方法java.net.NetWorkInterface.getHardwareAddress(),这个方法就是得到网卡MAC地址的方法,可是为何jdk6.0里面的UUID类还是没有提供基于第一种算法的方法呢?还有就是,第5种算法也是很容易支持的,jdk6.0居然也不支持。

另外,UUID据说还有32位的版本,它的形式为:8-4-4-4-12,有人还提供了从16位转移到32位的方法。对此暂时没有看到标准的说明。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值