zoukankan      html  css  js  c++  java
  • UUID生成工具

    public class UUIDUtils {
    private static SecureRandom SEEDER_STATIC = null;
    private static byte[] ADDRESS = null;
    private static String MID_VALUE_STATIC = null;
    private String midValue = null;
    private SecureRandom seeder = null;

    static {
    try {
    ADDRESS = InetAddress.getLocalHost().getAddress();
    StringBuffer buffer = new StringBuffer(8);
    buffer.append(toHex(toInt(ADDRESS), 8));
    MID_VALUE_STATIC = buffer.toString();
    SEEDER_STATIC = new SecureRandom();
    SEEDER_STATIC.nextInt();
    } catch (Exception ex) {
    ex.printStackTrace();
    }
    }

    public UUIDUtils() {
    StringBuffer buffer = new StringBuffer(16);
    buffer.append(MID_VALUE_STATIC);
    buffer.append(toHex(System.identityHashCode(this), 8));
    midValue = buffer.toString();
    seeder = new SecureRandom();
    seeder.nextInt();
    }

    /**
    * 该方法用来产生一个32位的唯一的标记String
    *
    * @param obj
    * 传入一个参考的对象
    * @return
    */
    public static String generate(Object obj) {
    StringBuffer uid = new StringBuffer(32);

    // get the system time
    long currentTimeMillis = System.currentTimeMillis();
    uid.append(toHex((int) (currentTimeMillis & -1L), 8));

    // get the internet address
    uid.append(MID_VALUE_STATIC);

    // get the object hash value
    uid.append(toHex(System.identityHashCode(obj), 8));

    // get the random number
    uid.append(toHex(getRandom(), 8));

    return uid.toString();
    }

    /**
    * 该方法用来产生一个32位的String唯一标记
    */
    public String generate() {
    StringBuffer uid = new StringBuffer(32);

    // get the system time
    long currentTimeMillis = System.currentTimeMillis();
    uid.append(toHex((int) (currentTimeMillis & -1L), 8));

    // get the internet address
    uid.append(midValue);

    // get the random number
    uid.append(toHex(seeder.nextInt(), 8));

    return uid.toString();
    }

    private static String toHex(int value, int length) {
    char[] hexDigits = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };
    StringBuffer buffer = new StringBuffer(length);
    int shift = length - 1 << 2;
    for (int i = -1; ++i < length;) {
    buffer.append(hexDigits[value >> shift & 0xf]);
    value <<= 4;
    }

    return buffer.toString();
    }

    private static int toInt(byte[] bytes) {
    int value = 0;
    for (int i = -1; ++i < bytes.length;) {
    value <<= 8;
    value |= bytes[i];
    }

    return value;
    }

    private static synchronized int getRandom() {
    return SEEDER_STATIC.nextInt();
    }

  • 相关阅读:
    【BZOJ4892】【TJOI2017】—DNA(后缀数组+ST表)
    【BZOJ1563】【NOI2009】—诗人小G(决策二分栈优化dp)
    【洛谷P5249】【LnOI2019】—加特林轮盘赌(概率dp)
    【Ural1519】— Formula1(轮廓线dp)
    【BZOJ3728】【PA2014】—Final Zarowki(思维题)
    【BZOJ3730】—震波(动态点分治)
    【Hackerrank (70)】—Range Modular Query(莫队+暴力)
    【省选模拟】—Cactus(圆方树+dfs序)
    【BZOJ2125】—最短路(圆方树+树链剖分)
    python 基础 列表
  • 原文地址:https://www.cnblogs.com/guangxiang/p/10621509.html
Copyright © 2011-2022 走看看