JAVA-产生唯一32位GUID
import java.net.*;
import java.util.*;
import java.security.*;
import org.apache.log4j.Logger;
/**
* 產生唯一GUID
*/
public class RandomGUID extends Object {
public String valueBeforeMD5 = "";
public String valueAfterMD5 = "";
private static Random myRand;
private static SecureRandom mySecureRand;
static Logger logger = Logger.getLogger(RandomGUID.class);
static {
mySecureRand = new SecureRandom();
long secureInitializer = mySecureRand.nextLong();
myRand = new Random(secureInitializer);
}
/**
* 生成32位GUID码
* @return
*/
static public String generatorGUID() {
RandomGUID myGUID = new RandomGUID();
return myGUID.toString();
}
public RandomGUID() {
getRandomGUID(false);
}
public RandomGUID(boolean secure) {
getRandomGUID(secure);
}
private void getRandomGUID(boolean secure) {
MessageDigest md5 = null;
StringBuffer sbValueBeforeMD5 = new StringBuffer();
try {
md5 = MessageDigest.getInstance("MD5");
} catch (NoSuchAlgorithmException e) {
logger.error("Error: " + e);
}
try {
InetAddress id = InetAddress.getLocalHost();
long time = System.currentTimeMillis();
long rand = 0;
if (secure) {
rand = mySecureRand.nextLong();
} else {
rand = myRand.nextLong();
}
sbValueBeforeMD5.append(id.toString());
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();
for (int j = 0; j < array.length; ++j) {
int b = array[j] & 0xFF;
if (b < 0x10)
sb.append('0');
sb.append(Integer.toHexString(b));
}
valueAfterMD5 = sb.toString();
} catch (UnknownHostException e) {
logger.error("Error:" + e);
}
}
public String toString() {
String raw = valueAfterMD5.toUpperCase();
StringBuffer sb = new StringBuffer();
sb.append(raw.substring(0, 8));
sb.append(raw.substring(8, 12));
sb.append(raw.substring(12, 16));
sb.append(raw.substring(16, 20));
sb.append(raw.substring(20));
return sb.toString();
}
/*
* test of class
*/
public static void main(String[] args) {
RandomGUID myGUID = new RandomGUID(true);
logger.error("Seeding String=" + myGUID.valueBeforeMD5);
logger.error("rawGUID=" + myGUID.valueAfterMD5);
logger.error("RandomGUID=" + myGUID.toString());
}
}
JAVA-产生唯一32位GUID的更多相关文章
- Java随机获取32位密码且必须包含大小写字母、数字和特殊字符,四种的任意三种
Java随机获取32位密码且必须包含大小写字母.数字和特殊字符,四种的任意三种 Java随机获取32位密码且必须包含大小写字母.数字和特殊字符,四种的任意三种,代码如下: import java.ut ...
- C#和sqlserver中生成新的32位GUID
C#中用Guid.NewGuid().ToString() Sql中用NEWID() 以上方法生成的是36位的GUID,如果需要转换成32位,则需要替换掉其中的'-'字符. Sql中的方法:repla ...
- Java中获取32位UUID
public class createUUID { public static void main(String[] args) { String uuid = UUID.randomUUID().t ...
- 【Java】 生成32位随机字符编号
/** * 生成32位编码 * @return string */ public static String getUUID(){ String uuid = UUID.randomUUID().to ...
- 生成唯一32位ID编码代码Java(GUID)
源码下载链接:http://pan.baidu.com/s/1jGCEWlC 扫扫关注"茶爸爸"微信公众号 坚持最初的执着,从不曾有半点懈怠,为优秀而努力,为证明自己而活. /* ...
- Java 生成16/32位 MD5
http://blog.csdn.net/codeeer/article/details/30044831
- java计算文件32位md5值
protected static String getFileMD5(String fileName) { File file = new File(fileName); if(!file.exist ...
- 在Delphi中获得唯一32位长字符串
function GetGUID: string; var vGUID: TGUID; vTemp:string; begin if S_OK = CreateGuid(vGUID) th ...
- Java class不分32位和64位
1.32位JDK编译的java class在32位系统和64位系统下都可以运行,64位系统兼容32位程序,可以理解.2.无论是Linux还是Windows平台下的JDK编译的java class在Li ...
随机推荐
- [转帖]@RequestMapping 用法详解之地址映射(转)
@RequestMapping 用法详解之地址映射(转) https://www.cnblogs.com/qq78292959/p/3760560.html 从csdn 发现的文章 然后csdn指向c ...
- Hadoop-(Flume)
Hadoop-(Flume) 1. Flume 介绍 1.1. 概述 Flume是一个分布式.可靠.和高可用的海量日志采集.聚合和传输的系统. Flume可以采集文件,socket数据包.文件.文件夹 ...
- Linux就该这么学——新手必须掌握的命令之工作目录切换命令组
pwd命令 用途 : 用于显示用户当前所处的工作目录.如下图pwd命令运行结果所示 格式 : pwd[选项] 图pwd命令运行结果所示 cd命令 用途 : 用于切换工作路径,如图cd命令运行结果 格式 ...
- 二维数组(解引用、指针数组、数组的指针)——C语言
二维数组 在说二维数组前先来说下一维数组中的指针数组和和数组的指针 一.一维数组中指针数组和数组指针的区别 指针数组: ]; []的优先级比*高,首先它是一个数组,它的大小是5,它里面存放的数据类型是 ...
- 8.bash编辑命令行
8.编辑命令行本章介绍 GNU 命令行编辑界面的基本功能.命令行编辑是 Readline 库提供的:这个库被几个不同的程序共用,Bash 是其中一个.使用交互式的 shell 时,默认已经打开了命令行 ...
- TreeSet——实现Comparable接口并重写CompareTo()方法
TreeSet是以自然顺序存的数据,例如 Set<Student> students=new TreeSet(); students.add(new Student("111&q ...
- exclipe怎么设置编码为UTF-8
如果要使插件开发应用能有更好的国际化支持,能够最大程度的支持中文输出,则最好使 Java文件使用UTF-8编码.然而,Eclipse工作空间(workspace)的缺省字符编码是操作系统缺省的编码,简 ...
- Unity Button按钮延迟
1.把下面脚本放到Editor文件夹下,这样脚本继承Button之后,新声明的public变量才能在Inspector面板显示出来. using System.Collections; using S ...
- O032、Nova reboot 和 lock 操作
参考https://www.cnblogs.com/CloudMan6/p/5479408.html 前面通过日志详细分析了 nova 的 launch.shutoff .start 操作. ...
- Extjs中,Vo对象中的属性无法在data中获取的解决方法
store.getById(data.data.id).raw.redpackid