<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)

    隨筆分類

    隨筆檔案

    收藏夾

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 少妇亚洲免费精品| 久久久亚洲欧洲日产国码农村| 性生大片视频免费观看一级| 久久亚洲精品视频| 免费毛片a在线观看67194 | 亚洲国产av高清无码| 全免费一级毛片在线播放| h视频免费高清在线观看| 亚洲美女色在线欧洲美女| 日本不卡高清中文字幕免费| 免费看少妇高潮成人片| 亚洲午夜无码久久| 亚洲精品乱码久久久久久中文字幕 | 好先生在线观看免费播放| 精品国产日韩亚洲一区91| 亚洲人成网址在线观看| 国产成人一区二区三区免费视频| 日韩免费电影网址| 白白色免费在线视频| 亚洲伊人久久大香线焦| 亚洲线精品一区二区三区| 永久免费视频v片www| 最近免费mv在线电影| 五月天婷婷免费视频| 国产亚洲玖玖玖在线观看| 亚洲成人免费在线| 亚洲日本中文字幕一区二区三区| 成人免费AA片在线观看| 久草视频在线免费看| 人成电影网在线观看免费| 亚洲中文无码mv| 久久久久亚洲AV成人片| 国产亚洲精久久久久久无码AV | 亚洲Aⅴ无码专区在线观看q| 亚洲国产午夜中文字幕精品黄网站 | 免费A级毛片无码A∨| 久久精品免费网站网| 美女扒开屁股让男人桶爽免费 | 久久久久久久国产免费看| WWW国产亚洲精品久久麻豆| 精品亚洲AV无码一区二区三区|