python 如何生成uuid

Python 生成 UUID 主要用标准库 uuid 模块,最常用 uuid.uuid4() 生成高安全性随机 UUID;还支持 uuid1(时间+MAC)、uuid3/uuid5(哈希确定性 ID);可转字符串、去横线、校验还原,勿手动拼接。

Python 生成 UUID 很简单,主要用标准库 uuid 模块,无需安装额外包。

使用 uuid4() 生成随机 UUID

最常用的是 uuid.uuid4(),它基于随机数生成,安全性高、碰撞概率极低,适合大多数场景(如数据库主键、会话 ID)。

  • 返回的是 uuid.UUID 对象,可直接使用或转为字符串
  • 调用时不需要参数,每次结果都不同

示例:

import uuid
uid = uuid.uuid4()
print(uid) # e.g. 550e8400-e29b-41d4-a716-446655440000
print(str(uid)) # 同上,字符串形式
print(uid.hex) # 无横线的纯十六进制字符串:550e8400e29b41d4a716446655440000

其他常用 UUID 版本

根据需求可选不同生成方式:

  • uuid.uuid1():基于时间戳 + 主机 MAC 地址,唯一性强但可能暴露生成时间和机器信息
  • uuid.uuid3(namespace, name):用 MD5 哈希生成确定性 UUID,相同命名空间和名字总得同一结果(适合从字符串稳定派生 ID)
  • uuid.uuid5(namespace, name):类似 uuid3,但用 SHA-1,更安全,推荐用于需确定性的场景

示例(uuid5):

import uuid
ns = uuid.NAMESPACE_DNS
uid = uuid.uuid5(ns, "example.com")
print(uid) # 每次运行结果固定

常见实用技巧

  • 想省略横线?用 uid.hexstr(uid).replace("-", "")
  • 存数据库前常转成字符串:str(uuid.uuid4())
  • 需要带版本标识?uid.version 返回整数(如 4),uid.variant 查变体类型
  • 从字符串还原 UUID 对象:uuid.UUID("550e8400-e29b-41d4-a716-446655440000"),自动校验格式

不推荐的做法

避免手动拼接或用 random + 字符串模拟 UUID——不符合标准、无版本信息、无法被其他系统识别,也失去 UUID 库内置的校验和兼容性保障。