【问题标题】:Make UUID shorter (Hex to ASCII conversion)使 UUID 更短(十六进制到 ASCII 转换)
【发布时间】:2010-11-24 08:51:08
【问题描述】:

在我的 Web 应用程序中,一个模型使用由某些 UUID 工具生成的标识符。由于我希望该标识符成为 URL 的一部分,因此我正在研究缩短该 UUID 字符串的方法。由于它目前是十六进制格式,我想以某种方式将其转换为 ASCII。因为它应该只包含普通字符和数字([\d\w]+),所以正常的十六进制到 ASCII 转换似乎不起作用(丑陋的字符)。 你知道一些很好的算法或工具(Ruby)来做到这一点吗?

【问题讨论】:

  • 有趣的事实:base64 编码的 uuid 长度为 22 个字符 + 两个填充字符 ('==')。 uuid 的标准十六进制表示为 32 个字符长 + 4 个“-”字符。
  • 你可以用tools.ietf.org/html/rfc1924修改过的base85编码再保存两个字符(IPv6地址也是128位,方便);它的字符集并不完全是 URL 安全的,但我认为如果你真的想要,你可以修复它。

标签: ruby hex uuid


【解决方案1】:

最后,UUID 是一个 128 位的二进制数。如果将其表示为 16 个未编码的字节,则无法避免“丑陋的字符”。您可能想要做的是从十六进制解码它,然后使用base64 对其进行编码。请注意,base64 编码使用字符 + / = 以及 A-Za-z0-9,您需要进行一些后处理(我建议 s/+/-/g; s/\//_/g; s/==$// - base64ed UUID 将始终以两个等号结尾)

【讨论】:

    猜你喜欢
    • 2014-06-22
    • 1970-01-01
    • 2015-05-22
    • 1970-01-01
    • 2011-11-27
    • 2012-11-14
    • 2016-04-22
    • 2017-08-28
    • 1970-01-01
    相关资源
    最近更新 更多