Frage

I'm trying to make the java UUID shorter while preserving the same uniqueness as the UUID has. I wrote the following code:

public static void main(String[] args) {
    UUID uid=UUID.randomUUID();
    String shortId=to62System(uid.getMostSignificantBits())+
        to62System(uid.getLeastSignificantBits());

    System.out.println(shortId);
}

static char[] DIGITS = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ".toCharArray();
static int RADIX = DIGITS.length;

public static String to62System(long value) {
    if (value == 0) {
        return "0";
    } else {
        char[] buf = new char[11];
        int charPos = 10;
        long i = value;
        while (i != 0) {
            buf[charPos--] = DIGITS[Math.abs((int) (i % RADIX))];
            i /= RADIX;
        }
        return new String(buf, charPos + 1, (10 - charPos));
    }
}

Am I doing it right or did I overlooked something important?

War es hilfreich?

Lösung

I use org.apache.commons.codec.binary.Base64 to convert a UUID into a url-safe unique string that is 22 characters in length and has the same uniqueness as UUID.

I posted my code on Storing UUID as base64 String

Andere Tipps

Take a look at FriendlyId library. This library allow to encode UUID to Base62 string (Url62) and back. Uniqueness is achieved and encoded string is shorter.

https://github.com/Devskiller/friendly-id

I believe even once you get it down to 22 characters by changing to base whatever, you can safely truncate a few characters and still be reasonably certain you won't get any collisions, as you probably know the astronomically large numbers involved. LOL loved the first guy's response thinking u were just like grabbing some characters from a standard UUID and calling it a day haha

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top