zoukankan      html  css  js  c++  java
  • java 生成GUID

      全局唯一标识符(GUID,Globally Unique Identifier)是一种由算法生成的二进制长度为128位的数字标识符,一般用16进制表示。在理想情况下,任何计算机和计算机集群都不会生成两个相同的GUID。算法的核心思想是结合机器的网卡、当地时间、一个随机数来生成GUID。从理论上讲,如果一台机器每秒产生10000000个GUID,则可以保证(概率意义上)3240年不重复

    第一种:可以用UUID类来生成GUID

    import java.util.UUID;
    
    public class GuidTest {
        public static void main(String[] args) {
            UUID uuid = UUID.randomUUID();
            System.out.println (uuid);
        }
    }

    输出:

    第二种:直接生成

    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 GUID {
    
        public String valueBeforeMD5 = "";
        public String valueAfterMD5 = "";
        private static final Random myRand;
        private static final 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) {
                e.printStackTrace();
            }
    
        }
    
        public GUID() {
            getRandomGUID(false);
        }
    
        public GUID(boolean secure) {
            getRandomGUID(secure);
        }
    
        private void getRandomGUID(boolean secure) {
            MessageDigest md5 = null;
            StringBuilder sbValueBeforeMD5 = new StringBuilder();
    
            try {
                md5 = MessageDigest.getInstance("MD5");
            } catch (NoSuchAlgorithmException e) {
                System.out.println("Error: " + e);
            }
    
            try {
                long time = System.currentTimeMillis();
                long rand = myRand.nextLong();
                if (secure) {
                    rand = mySecureRand.nextLong();
                }
    
                sbValueBeforeMD5.append(s_id);
                sbValueBeforeMD5.append(":");
                sbValueBeforeMD5.append(time);
                sbValueBeforeMD5.append(":");
                sbValueBeforeMD5.append(rand);
    
                valueBeforeMD5 = sbValueBeforeMD5.toString();
                md5.update(valueBeforeMD5.getBytes());
    
                byte[] array = md5.digest();
                StringBuilder sb = new StringBuilder();
                for (byte value : array) {
                    int b = value & 0xFF;
                    if (b < 0x10) sb.append('0');
                    sb.append(Integer.toHexString(b));
                }
                valueAfterMD5 = sb.toString();
            } catch (Exception e) {
                System.out.println("Error:" + e);
            }
        }
    
        public String toString() {
            String raw = valueAfterMD5.toUpperCase();
            return raw.substring(0, 8) +
                    "-" +
                    raw.substring(8, 12) +
                    "-" +
                    raw.substring(12, 16) +
                    "-" +
                    raw.substring(16, 20) +
                    "-" +
                    raw.substring(20);
        }
    
        public static void main(String[] args) {
            GUID guid = new GUID();
            System.out.println(guid);
        }
    }

    输出:

    不积跬步,无以至千里;不积小流,无以成江海
  • 相关阅读:
    Codeforces 872B:Maximum of Maximums of Minimums(思维)
    Codeforces 849A:Odds and Ends(思维)
    洛谷 P2397:yyy loves Maths VI (mode)(摩尔投票算法)
    POJ 3264:Balanced Lineup(区间最值查询ST表&线段树)
    Atcoder ABC137D:Summer Vacation(贪心)
    POJ 3278:The merchant(LCA&DP)
    Codeforces Gym-100985C: MaratonIME plays Nim(交互题&博弈)
    ZOJ 1141:Closest Common Ancestors(LCA)
    浅谈C++运算符重载
    初学c++动态联编
  • 原文地址:https://www.cnblogs.com/hzzjj/p/15741060.html
Copyright © 2011-2022 走看看