Your own UUID 2 : UUID GUID « Development Class « Java






Your own UUID 2

     

//package jatools.util;

import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.Serializable;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;


/**
 * DOCUMENT ME!
 *
 * @author $author$
 * @version $Revision: 1.1 $
  */
public final class UUID implements Serializable, Comparable {
    private static final long serialVersionUID = 0xbc9903f7986d852fL;
    private static volatile SecureRandom numberGenerator = null;
    private final long mostSigBits;
    private final long leastSigBits;
    private transient int version;
    private transient int variant;
    private volatile transient long timestamp;
    private transient int sequence;
    private transient long node;
    private transient int hashCode;

    private UUID(byte[] abyte0) {
        version = -1;
        variant = -1;
        timestamp = -1L;
        sequence = -1;
        node = -1L;
        hashCode = -1;

        long l = 0L;
        long l1 = 0L;

        for (int i = 0; i < 8; i++)
            l = (l << 8) | (long) (abyte0[i] & 0xff);

        for (int j = 8; j < 16; j++)
            l1 = (l1 << 8) | (long) (abyte0[j] & 0xff);

        mostSigBits = l;
        leastSigBits = l1;
    }

    /**
     * Creates a new UUID object.
     *
     * @param l DOCUMENT ME!
     * @param l1 DOCUMENT ME!
     */
    public UUID(long l, long l1) {
        version = -1;
        variant = -1;
        timestamp = -1L;
        sequence = -1;
        node = -1L;
        hashCode = -1;
        mostSigBits = l;
        leastSigBits = l1;
    }

    /**
     * DOCUMENT ME!
     *
     * @return DOCUMENT ME!
     */
    public static UUID randomUUID() {
        SecureRandom securerandom = numberGenerator;

        if (securerandom == null) {
            numberGenerator = securerandom = new SecureRandom();
        }

        byte[] abyte0 = new byte[16];
        securerandom.nextBytes(abyte0);
        abyte0[6] &= 0xf;
        abyte0[6] |= 0x40;
        abyte0[8] &= 0x3f;
        abyte0[8] |= 0x80;

        UUID uuid = new UUID(abyte0);

        return new UUID(abyte0);
    }
    
    public static String newInstance()
    {
      return randomUUID().toString() ;
    }

    /**
     * DOCUMENT ME!
     *
     * @param abyte0 DOCUMENT ME!
     *
     * @return DOCUMENT ME!
     */
    public static UUID nameUUIDFromBytes(byte[] abyte0) {
        MessageDigest messagedigest;

        try {
            messagedigest = MessageDigest.getInstance("MD5");
        } catch (NoSuchAlgorithmException nosuchalgorithmexception) {
            throw new InternalError("MD5 not supported");
        }

        byte[] abyte1 = messagedigest.digest(abyte0);
        abyte1[6] &= 0xf;
        abyte1[6] |= 0x30;
        abyte1[8] &= 0x3f;
        abyte1[8] |= 0x80;

        return new UUID(abyte1);
    }

    /**
     * DOCUMENT ME!
     *
     * @param s DOCUMENT ME!
     *
     * @return DOCUMENT ME!
     */
    public static UUID fromString(String s) {
        String[] as = s.split("-");

        if (as.length != 5) {
            throw new IllegalArgumentException((new StringBuffer()).append("Invalid UUID string: ")
                                                .append(s).toString());
        }

        for (int i = 0; i < 5; i++)
            as[i] = (new StringBuffer()).append("0x").append(as[i]).toString();

        long l = Long.decode(as[0]).longValue();
        l <<= 16;
        l |= Long.decode(as[1]).longValue();
        l <<= 16;
        l |= Long.decode(as[2]).longValue();

        long l1 = Long.decode(as[3]).longValue();
        l1 <<= 48;
        l1 |= Long.decode(as[4]).longValue();

        return new UUID(l, l1);
    }

    /**
     * DOCUMENT ME!
     *
     * @return DOCUMENT ME!
     */
    public long getLeastSignificantBits() {
        return leastSigBits;
    }

    /**
     * DOCUMENT ME!
     *
     * @return DOCUMENT ME!
     */
    public long getMostSignificantBits() {
        return mostSigBits;
    }

    /**
     * DOCUMENT ME!
     *
     * @return DOCUMENT ME!
     */
    public int version() {
        if (version < 0) {
            version = (int) ((mostSigBits >> 12) & 15L);
        }

        return version;
    }

    /**
     * DOCUMENT ME!
     *
     * @return DOCUMENT ME!
     */
    public int variant() {
        if (variant < 0) {
            if (leastSigBits >>> 63 == 0L) {
                variant = 0;
            } else if (leastSigBits >>> 62 == 2L) {
                variant = 2;
            } else {
                variant = (int) (leastSigBits >>> 61);
            }
        }

        return variant;
    }

    /**
     * DOCUMENT ME!
     *
     * @return DOCUMENT ME!
     */
    public long timestamp() {
        if (version() != 1) {
            throw new UnsupportedOperationException("Not a time-based UUID");
        }

        long l = timestamp;

        if (l < 0L) {
            l = (mostSigBits & 4095L) << 48;
            l |= (((mostSigBits >> 16) & 65535L) << 32);
            l |= mostSigBits >>> 32;
            timestamp = l;
        }

        return l;
    }

    /**
     * DOCUMENT ME!
     *
     * @return DOCUMENT ME!
     */
    public int clockSequence() {
        if (version() != 1) {
            throw new UnsupportedOperationException("Not a time-based UUID");
        }

        if (sequence < 0) {
            sequence = (int) ((leastSigBits & 0x3fff000000000000L) >>> 48);
        }

        return sequence;
    }

    /**
     * DOCUMENT ME!
     *
     * @return DOCUMENT ME!
     */
    public long node() {
        if (version() != 1) {
            throw new UnsupportedOperationException("Not a time-based UUID");
        }

        if (node < 0L) {
            node = leastSigBits & 0xffffffffffffL;
        }

        return node;
    }

    /**
     * DOCUMENT ME!
     *
     * @return DOCUMENT ME!
     */
    public String toString() {
        return (new StringBuffer()).append(digits(mostSigBits >> 32, 8)).append("-")
                .append(digits(mostSigBits >> 16, 4)).append("-").append(digits(mostSigBits, 4))
                .append("-").append(digits(leastSigBits >> 48, 4)).append("-")
                .append(digits(leastSigBits, 12)).toString();
    }

    private static String digits(long l, int i) {
        long l1 = 1L << (i * 4);

        return Long.toHexString(l1 | (l & (l1 - 1L))).substring(1);
    }

    /**
     * DOCUMENT ME!
     *
     * @return DOCUMENT ME!
     */
    public int hashCode() {
        if (hashCode == -1) {
            hashCode = (int) ((mostSigBits >> 32) ^ mostSigBits ^ (leastSigBits >> 32) ^
                leastSigBits);
        }

        return hashCode;
    }

    /**
     * DOCUMENT ME!
     *
     * @param obj DOCUMENT ME!
     *
     * @return DOCUMENT ME!
     */
    public boolean equals(Object obj) {
        if (!(obj instanceof UUID)) {
            return false;
        }

        if (((UUID) obj).variant() != variant()) {
            return false;
        } else {
            UUID uuid = (UUID) obj;

            return (mostSigBits == uuid.mostSigBits) && (leastSigBits == uuid.leastSigBits);
        }
    }

    /**
     * DOCUMENT ME!
     *
     * @param uuid DOCUMENT ME!
     *
     * @return DOCUMENT ME!
     */
    public int compareTo(UUID uuid) {
        return (mostSigBits >= uuid.mostSigBits)
        ? ((mostSigBits <= uuid.mostSigBits)
        ? ((leastSigBits >= uuid.leastSigBits)
        ? ((byte) (((byte) ((leastSigBits <= uuid.leastSigBits) ? 0 : 1)))) : (-1)) : 1) : (-1);
    }

    private void readObject(ObjectInputStream objectinputstream)
        throws IOException, ClassNotFoundException {
        objectinputstream.defaultReadObject();
        version = -1;
        variant = -1;
        timestamp = -1L;
        sequence = -1;
        node = -1L;
        hashCode = -1;
    }

    /**
     * DOCUMENT ME!
     *
     * @param obj DOCUMENT ME!
     *
     * @return DOCUMENT ME!
     */
    public int compareTo(Object obj) {
        return compareTo((UUID) obj);
    }

    /**
     * DOCUMENT ME!
     *
     * @param args DOCUMENT ME!
     */
    public static void main(String[] args) {
        System.out.println(randomUUID());
    }
}

   
    
    
    
    
  








Related examples in the same category

1.Random GUID
2.Algorithm for generating Random GUID
3.Get a unique identifier Using java.rmi.dgc.VMID
4.Using java.util.UUID
5.Create your own basic UUID
6.Session ID generator
7.UUID generator from Sun Microsystems
8.UUID generator from http://www1.ics.uci.edu
9.Using java.util.concurrent.AtomicLong: A numerical id, start at zero and increment by one.
10.A 32 byte GUID generator
11.A unique identifier
12.Generate pseudo-GUID sequences
13.Generates a UUID
14.Generates random UUIDs
15.Generator for Globally unique Strings
16.ID generator
17.Simple Id Generator
18.UUID generation
19.UUID generator of 32 bytes long values
20.Simple Long Id Generator
21.Long Sequence Generator
22.UUID generator
23.Thread-safe version of the Axiom UUIDGenerator
24.Convert an array of bytes into a List of Strings using UTF-8.
25.Your own UUID
26.Create GUIDs according to the principles at http://www.opengroup.org/dce/info/draft-leach-uuids-guids-01.txt.
27.Get Unique Id