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 ...
随机推荐
- [转帖]Dockerfile 中 ENTRYPOINT 与 CMD 的区别
Dockerfile 中 ENTRYPOINT 与 CMD 的区别 https://it.baiked.com/system/docker/1975.html 简单区别 Dockerfile 有两个启 ...
- 万能数据库的使用【DbVisualizer软件,连接不同类型的数据库】
1.打开指定的软件[万能连接数据库的软件],如图所示: 2.双击“此软件”,然后会显示出该软件的主页面,如图所示: 3.点击"任一个图标",会出现如下图所示的一个弹框,意思是:创建 ...
- Scala(一)安装
一.环境信息 操作系统:cat /etc/redhat-release JDK: java -version 二.下载Scala安装包 网址:https://www.scala-lang.org/d ...
- BEGIN_MESSAGE_MAP和END_MESSAGE_MAP()
这两个宏表示这个类的消息映射开始和结束,中间的宏定义定义了此类的所有的消息映射.前面的afx_msg void OnPaint():只是声明OnPaint()函数的一个消息处理函数,然后是OnPain ...
- java 序列化和反序列化的底层实现原理
出处:序列化和反序列化的底层实现原理是什么? 一.基本概念1.什么是序列化和反序列化 (1)Java序列化是指把Java对象转换为字节序列的过程,而Java反序列化是指把字节序列恢复为Java对象的过 ...
- k-means算法处理聚类标签不足的异常
k-means算法在人群聚类场景中,是一个非常实用的工具.(该算法的原理可以参考K-Means算法的Python实现) 常见调用方式 该算法常规的调用方式如下: # 从sklearn引包 from s ...
- SharePoint Resize app
//Global Variables used in different functions. var widthSelected=null; var senderId; var hostUrl = ...
- React高阶组件学习笔记
高阶函数的基本概念: 函数可以作为参数被传递,函数可以作为函数值输出. 高阶组件基本概念: 高阶组件就说接受一个组件作为参数,并返回一个新组件的函数. 为什么需要高阶组件 多个组件都需要某个相同的功能 ...
- python获取文件及文件夹大小
Python3.3下测试通过 获取文件大小 使用os.path.getsize函数,参数是文件的路径 获取文件夹大小 import os from os.path import join, getsi ...
- vue入门:(条件渲染)
v-if v-show v-else 一.v-if:生成或者移出一个元素 <div id="example"> <button v-on:click=" ...