You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Ruby中基于UUID生成UTID?

如何在Ruby中生成UTID?

没问题,我来帮你实现符合要求的UTID生成逻辑。根据你描述的规则,我们可以把整个流程拆成几个明确的步骤,直接用Ruby代码落地:

UTID生成核心流程

  • 生成版本4(随机)UUID
  • 将UUID转换为16字节的二进制表示
  • 使用Base32编码二进制数据
  • 每5个字符插入连字符提升可读性

代码实现

首先需要安装base32 gem(Ruby标准库没有内置Base32编码模块,这个gem轻量且符合RFC4648标准):

gem install base32

然后编写生成函数:

require 'securerandom'
require 'base32'

def generate_utid
  # 1. 生成标准的版本4 UUID
  uuid = SecureRandom.uuid
  
  # 2. 移除UUID的连字符,将十六进制字符串转为16字节二进制
  binary_uuid = uuid.delete('-').pack('H*')
  
  # 3. 对二进制数据进行Base32编码,禁用填充字符(=)
  base32_encoded = Base32.encode(binary_uuid, padding: false)
  
  # 4. 每5个字符插入连字符,优化可读性
  base32_encoded.chars.each_slice(5).map(&:join).join('-')
end

# 测试生成示例
puts generate_utid
# 输出示例:K3MVK-ZY7TK-6TQNR-J5Z7A-7Q

代码细节解释

  • SecureRandom.uuid:Ruby标准库原生方法,直接生成符合RFC4122的版本4随机UUID
  • pack('H*'):把去掉连字符的UUID十六进制字符串,转换为原始二进制数据,正好是UUID标准的16字节长度
  • Base32.encode(..., padding: false):避免生成末尾的填充符=,让UTID更简洁干净
  • each_slice(5).map(&:join).join('-'):把长字符串按每5个字符分割,用连字符连接,大幅提升可读性

如果不想依赖第三方gem,也可以自己实现Base32编码逻辑,但使用成熟的gem会更可靠且节省开发时间。


内容的提问来源于stack exchange,提问作者Vitalii Paprotskyi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:48:24