热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

javauuid32_Java生成32位UUID

importjava.net.InetAddress;publicclassUUIDGenerator{***产生一个32位的UUID**return*publicstaticSt

import java.net.InetAddress;

public class UUIDGenerator {

/**

* 产生一个32位的UUID

*

* @return

*/

public static String generate() {

return new StringBuilder(32).append(format(getIP())).append(

format(getJVM())).append(format(getHiTime())).append(

format(getLoTime())).append(format(getCount())).toString();

}

private static final int IP;

static {

int ipadd;

try {

ipadd = toInt(InetAddress.getLocalHost().getAddress());

} catch (Exception e) {

ipadd = 0;

}

IP = ipadd;

}

private static short counter = (short) 0;

private static final int JVM = (int) (System.currentTimeMillis() >>> 8);

private final static String format(int intval) {

String formatted = Integer.toHexString(intval);

StringBuilder buf = new StringBuilder("00000000");

buf.replace(8 - formatted.length(), 8, formatted);

return buf.toString();

}

private final static String format(short shortval) {

String formatted = Integer.toHexString(shortval);

StringBuilder buf = new StringBuilder("0000");

buf.replace(4 - formatted.length(), 4, formatted);

return buf.toString();

}

private final static int getJVM() {

return JVM;

}

private final static short getCount() {

synchronized (UUIDGenerator.class) {

if (counter <0)

counter = 0;

return counter++;

}

}

/**

* Unique in a local network

*/

private final static int getIP() {

return IP;

}

/**

* Unique down to millisecond

*/

private final static short getHiTime() {

return (short) (System.currentTimeMillis() >>> 32);

}

private final static int getLoTime() {

return (int) System.currentTimeMillis();

}

private final static int toInt(byte[] bytes) {

int result = 0;

for (int i = 0; i <4; i++) {

result = (result <<8) - Byte.MIN_VALUE + (int) bytes[i];

}

return result;

}

}

分享到:

18e900b8666ce6f233d25ec02f95ee59.png

72dd548719f0ace4d5f9bca64e1d7715.png

2010-04-28 13:45

浏览 20343

评论

1 楼

sdh5724

2010-05-02

private static final int IP;

static {

int ipadd;

try {

ipadd = toInt(InetAddress.getLocalHost().getAddress());

} catch (Exception e) {

ipadd = 0;

}

IP = ipadd;

}

这个算法, 最危害的一个地方, 所以你要做个检查, 如果你获得了127.0.0.1, 就很尴尬了。  这就是为什么很多UUID算法, 不这么搞的原因。

private final static short getHiTime() {

return (short) (System.currentTimeMillis() >>> 32);

}

private final static int getLoTime() {

return (int) System.currentTimeMillis();

}

这么做也是不合适的, 一般来说, 需要使用时间来生成安全随机数。 在高并发下, UUID也会一样的。



推荐阅读
author-avatar
Dr_H-鄧
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有