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的更多相关文章

  1. Java随机获取32位密码且必须包含大小写字母、数字和特殊字符,四种的任意三种

    Java随机获取32位密码且必须包含大小写字母.数字和特殊字符,四种的任意三种 Java随机获取32位密码且必须包含大小写字母.数字和特殊字符,四种的任意三种,代码如下: import java.ut ...

  2. C#和sqlserver中生成新的32位GUID

    C#中用Guid.NewGuid().ToString() Sql中用NEWID() 以上方法生成的是36位的GUID,如果需要转换成32位,则需要替换掉其中的'-'字符. Sql中的方法:repla ...

  3. Java中获取32位UUID

    public class createUUID { public static void main(String[] args) { String uuid = UUID.randomUUID().t ...

  4. 【Java】 生成32位随机字符编号

    /** * 生成32位编码 * @return string */ public static String getUUID(){ String uuid = UUID.randomUUID().to ...

  5. 生成唯一32位ID编码代码Java(GUID)

    源码下载链接:http://pan.baidu.com/s/1jGCEWlC 扫扫关注"茶爸爸"微信公众号 坚持最初的执着,从不曾有半点懈怠,为优秀而努力,为证明自己而活. /* ...

  6. Java 生成16/32位 MD5

    http://blog.csdn.net/codeeer/article/details/30044831

  7. java计算文件32位md5值

    protected static String getFileMD5(String fileName) { File file = new File(fileName); if(!file.exist ...

  8. 在Delphi中获得唯一32位长字符串

    function GetGUID: string; var   vGUID: TGUID;   vTemp:string; begin   if S_OK = CreateGuid(vGUID) th ...

  9. Java class不分32位和64位

    1.32位JDK编译的java class在32位系统和64位系统下都可以运行,64位系统兼容32位程序,可以理解.2.无论是Linux还是Windows平台下的JDK编译的java class在Li ...

随机推荐

  1. [转帖]Dockerfile 中 ENTRYPOINT 与 CMD 的区别

    Dockerfile 中 ENTRYPOINT 与 CMD 的区别 https://it.baiked.com/system/docker/1975.html 简单区别 Dockerfile 有两个启 ...

  2. 万能数据库的使用【DbVisualizer软件,连接不同类型的数据库】

    1.打开指定的软件[万能连接数据库的软件],如图所示: 2.双击“此软件”,然后会显示出该软件的主页面,如图所示: 3.点击"任一个图标",会出现如下图所示的一个弹框,意思是:创建 ...

  3. Scala(一)安装

    一.环境信息 操作系统:cat /etc/redhat-release JDK:  java -version 二.下载Scala安装包 网址:https://www.scala-lang.org/d ...

  4. BEGIN_MESSAGE_MAP和END_MESSAGE_MAP()

    这两个宏表示这个类的消息映射开始和结束,中间的宏定义定义了此类的所有的消息映射.前面的afx_msg void OnPaint():只是声明OnPaint()函数的一个消息处理函数,然后是OnPain ...

  5. java 序列化和反序列化的底层实现原理

    出处:序列化和反序列化的底层实现原理是什么? 一.基本概念1.什么是序列化和反序列化 (1)Java序列化是指把Java对象转换为字节序列的过程,而Java反序列化是指把字节序列恢复为Java对象的过 ...

  6. k-means算法处理聚类标签不足的异常

    k-means算法在人群聚类场景中,是一个非常实用的工具.(该算法的原理可以参考K-Means算法的Python实现) 常见调用方式 该算法常规的调用方式如下: # 从sklearn引包 from s ...

  7. SharePoint Resize app

    //Global Variables used in different functions. var widthSelected=null; var senderId; var hostUrl = ...

  8. React高阶组件学习笔记

    高阶函数的基本概念: 函数可以作为参数被传递,函数可以作为函数值输出. 高阶组件基本概念: 高阶组件就说接受一个组件作为参数,并返回一个新组件的函数. 为什么需要高阶组件 多个组件都需要某个相同的功能 ...

  9. python获取文件及文件夹大小

    Python3.3下测试通过 获取文件大小 使用os.path.getsize函数,参数是文件的路径 获取文件夹大小 import os from os.path import join, getsi ...

  10. vue入门:(条件渲染)

    v-if v-show v-else 一.v-if:生成或者移出一个元素 <div id="example"> <button v-on:click=" ...