Mega Code Archive

 
Categories / Java / Development Class
 

UUID generator of 32 bytes long values

// Copyright (c) 2003-2009, Jodd Team (jodd.org). All Rights Reserved. import java.net.InetAddress; import java.net.UnknownHostException; import java.security.NoSuchAlgorithmException; import java.security.SecureRandom; /**  * UUID generator of 32 bytes long values. It is builded from:  * <ol>  * <li> (0-7) IPAddress as HEX - 8 bytes  * <li> (8-19) CurrentTimeMillis() as HEX - Display all 12 bytes  * <li> (20-23) SecureRandom() as HEX - Keep only 4 significant bytes. Since this is "random" it doesn't really matter how many bytes you keep or eliminate  * <li> (24-31) System.identityHashCode as Hex - 8 bytes  * </ol>  */ public class Uuid32Generator {   public static String generateUUID() {     return new Uuid32Generator().generate();   }   private static final String ZEROS = "000000000000"; // 12   public String generate() {     StringBuilder strRetVal = new StringBuilder();     String strTemp;     try {       // IPAddress segment       InetAddress addr = InetAddress.getLocalHost();       byte[] ipaddr = addr.getAddress();       for (byte anIpaddr : ipaddr) {         Byte b = new Byte(anIpaddr);         strTemp = Integer.toHexString(b.intValue() & 0x000000ff);         strRetVal.append(ZEROS.substring(0, 2 - strTemp.length()));         strRetVal.append(strTemp);       }       strRetVal.append(':');       // CurrentTimeMillis() segment       strTemp = Long.toHexString(System.currentTimeMillis());       strRetVal.append(ZEROS.substring(0, 12 - strTemp.length()));       strRetVal.append(strTemp).append(':');       // random segment       SecureRandom prng = SecureRandom.getInstance("SHA1PRNG");       strTemp = Integer.toHexString(prng.nextInt());       while (strTemp.length() < 8) {         strTemp = '0' + strTemp;       }       strRetVal.append(strTemp.substring(4)).append(':');       // IdentityHash() segment       strTemp = Long.toHexString(System.identityHashCode(this));       strRetVal.append(ZEROS.substring(0, 8 - strTemp.length()));       strRetVal.append(strTemp);     } catch (UnknownHostException uhex) {       throw new RuntimeException("Unknown host.", uhex);     } catch (NoSuchAlgorithmException nsaex) {       throw new RuntimeException("Algorithm 'SHA1PRNG' is unavailiable.", nsaex);     }     return strRetVal.toString().toUpperCase();   } }