我正在尝试缩短 UUID 值(以 UUID 形式存储在数据库中,而不是字符串)以嵌入 URL 中。我知道 URL 是 Base64,但试图看看是否可以在没有破折号和下划线字符的情况下实现它。 所以我想将UUID转换为base62。经过大量谷歌搜索后,我发现:
没有这方面的标准(例如 RFC2045),对吗?
最重要的是没有适当的实施。我找到了很多关于如何做到这一点的片段,但有一些注释“这是一个幼稚的实现”之类的。是否有正确的实现(我不介意应该如何完成映射的确切解释,只要正确完成)?
Apache Commons Codec 和 Guava 中有一些基类针对 Base32 和 Base64 进行了扩展,但我发现将其扩展到 Base62 并不容易。是否有可能做到这一点(考虑到映射根本不同的事实)?
谢谢。
您可能想尝试这个库: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
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
的主要贡献者。