32位随机字符串工具类-RandomGUIDUtil

import org.apache.log4j.Logger;

import java.net.InetAddress;
import java.net.UnknownHostException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.util.Random;

public class RandomGUIDUtil {
   /** 日志管理类对象 */
   private Logger logger = Logger.getLogger(this.getClass().getName());
   public String valueBeforeMD5 = "";
   public String valueAfterMD5 = "";
   private static Random myRand;
   private static SecureRandom mySecureRand;
   private static String s_id;

   static {
      mySecureRand = new SecureRandom();
      long secureInitializer = mySecureRand.nextLong();
      myRand = new Random(secureInitializer);
      try {
         s_id = InetAddress.getLocalHost().toString();
      } catch (UnknownHostException e) {
         System.out.println("构造带指定详细消息和嵌入异常!");
      }
   }

   public RandomGUIDUtil() throws Exception {
      getRandomGUID(false);
   }

   public RandomGUIDUtil(boolean secure) throws Exception {
      getRandomGUID(secure);
   }

   /* * 随机生成GUID */
   private void getRandomGUID(boolean secure) throws Exception {
      MessageDigest md5 = null;
      StringBuffer sbValueBeforeMD5 = new StringBuffer();
      try {
         md5 = MessageDigest.getInstance("MD5");
      } catch (NoSuchAlgorithmException e) {
         logger.error("初始化MD5出错!");
         throw new NoSuchAlgorithmException("初始化MD5出错!");
      }
      try {
         long time = System.currentTimeMillis();
         long rand = 0;
         if (secure) {
            rand = mySecureRand.nextLong();
         } else {
            rand = myRand.nextLong();
         }
         sbValueBeforeMD5.append(s_id);
         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 (Exception e) {
         logger.error("获得MD5加密码出错!");
         throw new Exception("初始化MD5出错!");
      }
   }

   /** * 生成一个GUID串 * @return GUID * @throws Exception */
   public static String newGuid() throws Exception {
      RandomGUIDUtil rdmGUID = new RandomGUIDUtil();
      return rdmGUID.toString();
   }
   /* * 生成以主机串号、显卡串号、主板号,以保证唯一性的32位编码 */
   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();
   }

   public static void main(String[] args) throws Exception{
      System.out.println(RandomGUIDUtil.newGuid());
   }
}

猜你喜欢

转载自blog.csdn.net/weixin_42231507/article/details/80899160