У меня есть приложение, где я делаю это почти точно. UUID, закодированный в 22 символа Работает нормально. Тем не менее, основная причина, по которой я делаю это таким образом, заключается в том, что идентификаторы отображаются в URI веб-приложения, и 36 символов действительно достаточно велики для того, что появляется в URI. 22 символа все еще довольно длинные, но мы справляемся.
Вот код Ruby для этого:
# Make an array of 64 URL-safe characters
CHARS64 = ("a".."z").to_a + ("A".."Z").to_a + ("0".."9").to_a + ["-", "_"]
# Return a 22 byte URL-safe string, encoded six bits at a time using 64 characters
def to_s22
integer = self.to_i # UUID as a raw integer
rval = ""
22.times do
c = (integer & 0x3F)
rval += CHARS64[c]
integer = integer >> 6
end
return rval.reverse
end
Это не совсем то же самое, что и кодировка base64, потому что base64 использует символы, которые должны быть экранированы, если они появляются в компоненте пути URI. Реализация Java, скорее всего, будет совсем другой, так как у вас, скорее всего, будет массив необработанных байтов вместо действительно большого целого числа.