4

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

  1. 这没有标准(类似于 RFC2045),对吗?

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

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

4

2 回答 2

6

你可能想试试这个库:https ://github.com/Devskiler/friendly-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
于 2019-08-21T15:44:30.717 回答
0

编解码器Base62Codec可以有效地将 UUID 编码为 base-62。

// Returns a base-62 string
// uuid::: 01234567-89AB-4DEF-A123-456789ABCDEF
// base62: 0296tiiBY28FKCYq1PVSGd
String string = Base62Codec.INSTANCE.encode(uuid);

在uuid-creator的同一个中有其他编码的编解码器。

于 2021-08-24T19:54:58.427 回答