在Java中将UUID编码为Base62(不是Base64)

问题描述 投票:0回答:2

我正在尝试缩短 UUID 值(以 UUID 形式存储在数据库中,而不是字符串)以嵌入 URL 中。我知道 URL 是 Base64,但试图看看是否可以在没有破折号和下划线字符的情况下实现它。 所以我想将UUID转换为base62。经过大量谷歌搜索后,我发现:

  1. 没有这方面的标准(例如 RFC2045),对吗?

  2. 最重要的是没有适当的实施。我找到了很多关于如何做到这一点的片段,但有一些注释“这是一个幼稚的实现”之类的。是否有正确的实现(我不介意应该如何完成映射的确切解释,只要正确完成)?

  3. Apache Commons Codec 和 Guava 中有一些基类针对 Base32 和 Base64 进行了扩展,但我发现将其扩展到 Base62 并不容易。是否有可能做到这一点(考虑到映射根本不同的事实)?
    谢谢。

java encoding uuid base62
2个回答
6
投票

您可能想尝试这个库:https://github.com/Devskiller/friend-id

FriendlyID 库将给定的 UUID(36 个字符)转换为基于 Base62(最多 22 个字符)的 URL 友好 ID(“FriendlyID”),如下例所示:

   UUID                                        Friendly ID
   
   c3587ec5-0976-497f-8374-61e0c2ea3da5   ->   5wbwf6yUxVBcr48AMbz9cb
   |                                           |                              
   36 characters                               22 characters or less

此外,该库还允许:

  • 从FriendlyID转换回原来的UUID;和
  • 创建一个新的随机FriendlyID

1
投票

您可以使用

Base62Codec
将 UUID 有效编码为 base-62。

String string = Base62Codec.INSTANCE.encode(uuid);

您还可以生成 22 个或更少字符的友好 ID。

public static String getFriendlyID() {
    return Base62Codec.INSTANCE.encode(UUID.randomUUID());
}

public static String getFriendlyID(int length) {
    return Base62Codec.INSTANCE.encode(UUID.randomUUID())
                      .substring(0, Math.min(length, 22));
}

Base62Codec
uuid-creator 的编解码器。


免责声明:我是

uuid-creator
的主要贡献者。

© www.soinside.com 2019 - 2024. All rights reserved.