JAVA-产生唯一32位GUID

摘要:
importjava.net.*;importjava.util.*;importjava.security.*;importorg.apache.log4j。记录器;/***生成唯一的GUID*/publicclassRandomGUIDextendsObject{publicStringvalueBeforeMD5=“”;publicStringvalueAfterMD5=““”;priva
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》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇win10 + vs2017 + vcpkg —— VC++ 打包工具短信验证码、图形验证码、邮件验证的自动化测试下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

读取XML文件

读取指定路径下XML文件,并将读取值赋值给字典。         /// <summary>        /// 自定义配置文件custom.xml的节点内容集合        /// </summary> public Dictionary<string, string> DicCustomText = new Di...

Android随笔之——用shell脚本模拟用户按键、触摸操作

  之前写过两篇关于Android中模拟用户操作的博客(其实用一篇是转载的),现在就来讲讲用shell脚本来模拟用户按键操作。本次的目标是用shell脚本打开微信并在其搜索框中搜索相关内容。   本文的模拟功能主要是用adb的input命令来实现,如果你adb的环境变量配置正确的话,在cmd中输入 adb shell input 就可以看见input的用法...

android Uri获取真实路径转换成File的方法

Uri uri = data.getData(); 02   03 String[] proj = { MediaStore.Images.Media.DATA }; 04   05 Cursor actualimagecursor = managedQuery(uri,proj,null,null,null); 06   07...

多租户实现之基于Mybatis,Mycat的共享数据库,共享数据架构

前言 SaaS模式是什么? 传统的软件模式是在开发出软件产品后,需要去客户现场进行实施,通常部署在局域网,这样开发、部署及维护的成本都是比较高的。 现在随着云服务技术的蓬勃发展,就出现了SaaS模式。 所谓SaaS模式即是把产品部署在云服务器上,从前的客户变成了“租户”,我们按照功能和租用时间对租户进行收费。 这样的好处是,用户可以按自己的需求来购买功...

异步上传文件

异步上传文件多种方式归纳 最近在做异步上传文件的工作,用到了一些库,这里归纳下,暂且不考虑异常处理,仅作为demo。 1.不用任何插件,利用iframe,将form的taget设为iframe的name,注意设为iframe的id是没用的,跟网上很多说的不太一致 iframe_upload.htm <!DOCTYPE html PUBLIC "...

c# 键值对的方式post提交

DataContractJsonSerializer jsQcData = new DataContractJsonSerializer(typeof(DATA<data>));//DATA<data>要转换成json的值 MemoryStream msObj = new MemoryStream(); jsQcData.Writ...