在 Ruby 中压缩 MongoDB 对象 ID

发布于 2024-10-16 05:29:07 字数 165 浏览 1 评论 0原文

我正在寻找一种将对象的 ID 编码为较小字符串的方法以及再次对其进行解码的方法。

基本上我想要一个ID“47cc67093475061e3d95369d”变成类似“adff232”的东西......a'la bit.ly等等。

有没有什么gem可以做到这一点?

谢谢!

I'm looking for a way to encode an object's ID into a smaller string and also a way to decode it again.

Basically I want for instance an ID "47cc67093475061e3d95369d" to turn into something like "adff232"… a'la bit.ly, etc.

Is there any gem to do this?

Thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

三生一梦 2024-10-23 05:29:07

使用base62编码。有几个宝石,但它应该像这样简单:

id.to_s.to_i(16).base62_encode

在您的示例中,您的输出将是 sTIRzdDETzTR6YOh

Use base62 encoding. There are several gems, but it should be as simple as:

id.to_s.to_i(16).base62_encode

In your example case, your output would be sTIRzdDETzTR6YOh.

拧巴小姐 2024-10-23 05:29:07

如果您不打算显示压缩后的字符串,可以使用 packunpackid 压缩一半:

id = "47cc67093475061e3d95369d"
puts id.length             #=> 24

compressed_id = id.to_a.pack('H*')
p compressed_id            #=> "G\314g\t4u\006\036=\2256\235"
puts compressed_id.length  #=> 12

uncompressed_id = compressed_id.unpack('H*')[0]
p uncompressed_id          #=> "47cc67093475061e3d95369d"
puts uncompressed_id == id #=> true

If you don't intend to display the compressed string, you can compress the id by half with pack and unpack:

id = "47cc67093475061e3d95369d"
puts id.length             #=> 24

compressed_id = id.to_a.pack('H*')
p compressed_id            #=> "G\314g\t4u\006\036=\2256\235"
puts compressed_id.length  #=> 12

uncompressed_id = compressed_id.unpack('H*')[0]
p uncompressed_id          #=> "47cc67093475061e3d95369d"
puts uncompressed_id == id #=> true
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文