<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    tinguo002

     

    java生成uuid(轉載)

    public class UniqId {  
        
    private static char[] digits = '0''1''2''3''4''5''6''7',  
                
    '8''9''a''b''c''d''e''f' }
    ;  
      
        
    private static Map<Character, Integer> rDigits = new HashMap<Character, Integer>(  
                
    16);  
        
    static {  
            
    for (int i = 0; i < digits.length; ++i) {  
                rDigits.put(digits[i], i);  
            }
      
        }
      
      
        
    private static UniqId me = new UniqId();  
        
    private String hostAddr;  
        
    private Random random = new SecureRandom();  
        
    private MessageDigest mHasher;  
        
    private UniqTimer timer = new UniqTimer();  
      
        
    private ReentrantLock opLock = new ReentrantLock();  
      
        
    private UniqId() {  
            
    try {  
                InetAddress addr 
    = InetAddress.getLocalHost();  
      
                hostAddr 
    = addr.getHostAddress();  
            }
     catch (IOException e) {  
                hostAddr 
    = String.valueOf(System.currentTimeMillis());  
            }
      
      
            
    if (hostAddr == null || hostAddr.length() == 0  
                    
    || "127.0.0.1".equals(hostAddr)) {  
                hostAddr 
    = String.valueOf(System.currentTimeMillis());  
            }
      
      
            
    try {  
                mHasher 
    = MessageDigest.getInstance("MD5");  
            }
     catch (NoSuchAlgorithmException nex) {  
                mHasher 
    = null;  
            }
      
        }
      
      
        
    /** 
         * 獲取UniqID實例 
         *  
         * 
    @return UniqId 
         
    */
      
        
    public static UniqId getInstance() {  
            
    return me;  
        }
      
      
        
    /** 
         * 獲得不會重復的毫秒數 
         *  
         * 
    @return 
         
    */
      
        
    public long getUniqTime() {  
            
    return timer.getCurrentTime();  
        }
      
      
        
    /** 
         * 獲得UniqId 
         *  
         * 
    @return uniqTime-randomNum-hostAddr-threadId 
         
    */
      
        
    public String getUniqID() {  
            StringBuffer sb 
    = new StringBuffer();  
            
    long t = timer.getCurrentTime();  
      
            sb.append(t);  
      
            sb.append(
    "-");  
      
            sb.append(random.nextInt(
    8999+ 1000);  
      
            sb.append(
    "-");  
            sb.append(hostAddr);  
      
            sb.append(
    "-");  
            sb.append(Thread.currentThread().hashCode());  
      
            
    return sb.toString();  
        }
      
      
        
    /** 
         * 獲取MD5之后的uniqId string 
         *  
         * 
    @return uniqId md5 string 
         
    */
      
        
    public String getUniqIDHashString() {  
            
    return hashString(getUniqID());  
        }
      
      
        
    /** 
         * 獲取MD5之后的uniqId 
         *  
         * 
    @return byte[16] 
         
    */
      
        
    public byte[] getUniqIDHash() {  
            
    return hash(getUniqID());  
        }
      
      
        
    /** 
         * 對字符串進行md5 
         *  
         * 
    @param str 
         * 
    @return md5 byte[16] 
         
    */
      
        
    public byte[] hash(String str) {  
            opLock.lock();  
            
    try {  
                
    byte[] bt = mHasher.digest(str.getBytes("UTF-8"));  
                
    if (null == bt || bt.length != 16{  
                    
    throw new IllegalArgumentException("md5 need");  
                }
      
                
    return bt;  
            }
     catch (UnsupportedEncodingException e) {  
                
    throw new RuntimeException("unsupported utf-8 encoding", e);  
            }
     finally {  
                opLock.unlock();  
            }
      
        }
      
      
        
    /** 
         * 對二進制數據進行md5 
         *  
         * 
    @param str 
         * 
    @return md5 byte[16] 
         
    */
      
        
    public byte[] hash(byte[] data) {  
            opLock.lock();  
            
    try {  
                
    byte[] bt = mHasher.digest(data);  
                
    if (null == bt || bt.length != 16{  
                    
    throw new IllegalArgumentException("md5 need");  
                }
      
                
    return bt;  
            }
     finally {  
                opLock.unlock();  
            }
      
        }
      
      
        
    /** 
         * 對字符串進行md5 string 
         *  
         * 
    @param str 
         * 
    @return md5 string 
         
    */
      
        
    public String hashString(String str) {  
            
    byte[] bt = hash(str);  
            
    return bytes2string(bt);  
        }
      
      
        
    /** 
         * 對字節流進行md5 string 
         *  
         * 
    @param str 
         * 
    @return md5 string 
         
    */
      
        
    public String hashBytes(byte[] str) {  
            
    byte[] bt = hash(str);  
            
    return bytes2string(bt);  
        }
      
      
        
    /** 
         * 將一個字節數組轉化為可見的字符串 
         *  
         * 
    @param bt 
         * 
    @return 
         
    */
      
        
    public String bytes2string(byte[] bt) {  
            
    int l = bt.length;  
      
            
    char[] out = new char[l << 1];  
      
            
    for (int i = 0, j = 0; i < l; i++{  
                out[j
    ++= digits[(0xF0 & bt[i]) >>> 4];  
                out[j
    ++= digits[0x0F & bt[i]];  
            }
      
      
            
    return new String(out);  
        }
      
      
        
    /** 
         * 將字符串轉換為bytes 
         *  
         * 
    @param str 
         * 
    @return byte[] 
         
    */
      
        
    public byte[] string2bytes(String str) {  
            
    if (null == str) {  
                
    throw new NullPointerException("參數不能為空");  
            }
      
            
    if (str.length() != 32{  
                
    throw new IllegalArgumentException("字符串長度必須是32");  
            }
      
            
    byte[] data = new byte[16];  
            
    char[] chs = str.toCharArray();  
            
    for (int i = 0; i < 16++i) {  
                
    int h = rDigits.get(chs[i * 2]).intValue();  
                
    int l = rDigits.get(chs[i * 2 + 1]).intValue();  
                data[i] 
    = (byte) ((h & 0x0F<< 4 | (l & 0x0F));  
            }
      
            
    return data;  
        }
      
      
        
    /** 
         * 實現不重復的時間 
         *  
         * 
    @author dogun 
         
    */
      
        
    private static class UniqTimer {  
            
    private AtomicLong lastTime = new AtomicLong(System.currentTimeMillis());  
      
            
    public long getCurrentTime() {  
                
    return this.lastTime.incrementAndGet();  
            }
      
        }
      
    }
      



    歡迎大家訪問我的個人網站 萌萌的IT人

    posted on 2014-04-16 09:07 一堣而安 閱讀(564) 評論(0)  編輯  收藏 所屬分類: java

    導航

    統計

    常用鏈接

    留言簿(1)

    隨筆分類

    隨筆檔案

    收藏夾

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 国产亚洲婷婷香蕉久久精品| 亚洲国产成人精品无码区在线观看| 亚洲伊人久久大香线蕉在观| 久久国产精品免费视频| 亚洲产国偷V产偷V自拍色戒| 国产成人精品免费久久久久| 亚洲精品天天影视综合网| 99久久久国产精品免费牛牛| 亚洲精品动漫在线| 岛国av无码免费无禁网站| 亚洲精品女同中文字幕| 国产免费av片在线播放| 一级毛片视频免费| 亚洲乱色熟女一区二区三区丝袜| 国产免费拔擦拔擦8X高清在线人| 精品久久久久久亚洲| 99爱视频99爱在线观看免费| 亚洲国产精品久久网午夜| 毛片免费观看视频| 日韩毛片在线免费观看| 国产亚洲3p无码一区二区| 91人人区免费区人人| 亚洲精品久久无码| 久久精品亚洲乱码伦伦中文| 久9这里精品免费视频| 2017亚洲男人天堂一| 亚洲日本中文字幕天堂网| 中文无码成人免费视频在线观看 | 精品国产免费观看| yellow免费网站| 337p欧洲亚洲大胆艺术| 午夜影视在线免费观看| 免费毛片在线看片免费丝瓜视频| 久久精品国产亚洲AV不卡| 亚洲精品人成网线在线播放va| 亚洲第一页综合图片自拍| 99热这里有免费国产精品| 亚洲精品天堂成人片AV在线播放| 国产亚洲成av片在线观看| 人妻视频一区二区三区免费| 国产高潮久久免费观看|