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
Author by
Fipil
Updated on June 05, 2022Comments
-
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 over 10 yearsJust curious, why would you do this?
-
Sean over 10 yearsYou 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 over 10 yearsUnique over what space? That constrains the size of the ID.
-
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 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 over 10 years@WPrecht worldwide unique.
-