8

我试图使 java UUID 更短,同时保留与 UUID 相同的唯一性。我写了以下代码:

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));
    }
}

我做得对还是我忽略了一些重要的事情?

4

3 回答 3

4

我使用 org.apache.commons.codec.binary.Base64 将 UUID 转换为长度为 22 个字符且具有与 UUID 相同的唯一性的 url 安全的唯一字符串。

我在将 UUID 存储为 base64 字符串上发布了我的代码

于 2014-01-22T10:36:07.003 回答
2

看看FriendlyId库。该库允许将UUID编码为Base62字符串(Url62)并返回。实现了唯一性并且编码的字符串更短。

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

于 2017-10-19T07:51:33.007 回答
-1

我相信,即使您通过更改为基数将其减少到 22 个字符,您也可以安全地截断一些字符,并且仍然可以合理地确定不会发生任何冲突,因为您可能知道所涉及的天文数字。大声笑喜欢第一个家伙的反应,认为你就像从标准 UUID 中抓取一些字符并称之为一天哈哈

于 2020-03-08T14:43:07.690 回答