Shortening java UUID while preserving the uniqueness

16,247

Solution 1

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

Solution 2

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

Share:
16,247
Fipil
Author by

Fipil

Updated on June 05, 2022

Comments

  • Fipil
    Fipil almost 2 years

    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?

    • Zavior
      Zavior over 10 years
      Just curious, why would you do this?
    • Sean
      Sean over 10 years
      You can't: blogs.msdn.com/b/oldnewthing/archive/2008/06/27/8659071.aspx (edit: I'm not actually sure if randomUUID() uses the same algorithm, but chances are good that it's still not a great idea).
    • WPrecht
      WPrecht over 10 years
      Unique over what space? That constrains the size of the ID.
    • Fipil
      Fipil over 10 years
      @Zavior I need as short as possible worldwide unique id, usable in URL. It has to be short for example to be usable in the tweets. Yes, there are some url-shortening services, but I donnot want to use it.
    • Fipil
      Fipil over 10 years
      @Sean, I'm not sure that you studied my code example enough. As described in the article you pointed, someone gets just part of GUID and thinks that it's still unique. But it's not what I'm doing in my code example. The UUID consists of two longs, it's 16 bytes. I donnot cut any part of the bytes, I'm just changing each long from one number system (decimal) to another (radix=62). So the same number is then represented by shorter string.Then I concatenate these two strings.
    • Fipil
      Fipil over 10 years
      @WPrecht worldwide unique.