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 ... 
随机推荐
- 学习笔记:CentOS7学习之十三(1):硬盘介绍
			1. SAS-SATA-SSD-SCSI-IDE硬盘讲解 1.1 常见硬盘类型: SAS硬盘:SAS(Serial Attached SCSI),串行连接SCSI接口,串行连接小型计算机系统接口.SA ... 
- 【转帖】知乎关于鸿蒙OS的思考
			作者:bacon xu链接:https://www.zhihu.com/question/339567108/answer/782431141来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非 ... 
- shell 字符
			Shell 中的符号: 在shell中有很多符号代表了一些意思,重点说说 键盘上的符号在shell中的意义. 通配符: ~ 匹配家目录 ? 匹配单个字符.( ?之匹配单一的一个字符.x11 这种的就 ... 
- 使用winsw包装服务将nginx包装为Windows服务
			**Nginx本身在Windows上并不支持以服务的形式运行,官方文件中有提到.http://nginx.org/en/docs/windows.html,所以在Windows下使用winsw将Ngi ... 
- Web 开发和数据科学家仍是 Python 开发的两大主力
			由于 Python 2 即将退役,使用 Python 3 的开发者大约为 90%,Python 2 的使用量正在迅速减少.而去年仍有 1/4 的人使用 Python 2. Web 开发和数据科学家仍是 ... 
- 开发过程遇到的css样式问题记录
			一.移动端 1.部分安卓机圆角border-radius失效,显示为方形状? background-clip: padding-box; 2.部分安卓机字体图标出现锯齿? 使用iconfont图标 ... 
- TreeMap——实现comparable接口并重写CompareTo方法
			public class TreeMapTest { public static void main(String[] args) { Map<Student,Integer> stude ... 
- QPushButton样式
			QPushButton:hover:!pressed { border: 1px solid #434E7A; } 
- ASE19团队项目alpha阶段model组 scrum1 记录
			本次会议于11月1日,19时整在微软北京西二号楼13478召开,持续15分钟. 与会人员:Jiyan He, Kun Yan, Lei Chai, Linfeng Qi, Xueqing Wu, Yu ... 
- shell中处理参数getopts命令
			一.getopts 简介 由于shell命令行的灵活性,自己编写代码判断时,复杂度会比较高.使用内部命令 getopts 可以很方便地处理命令行参数.一般格式为:getopts optstring n ... 
