python生成随机唯一id的几种实现方法

Written by

in

文章目录
  • import uuid # 生成版本 4 的随机 UUID(最常用) unique_id = uuid.uuid4() print(unique_id) # 输出: f47ac10b-58cc-4372-a567-0e02b2c3d479 print(str(unique_id)) # 转换为字符串 # 生成版本 1 的 UUID(基于时间戳和 MAC 地址) timestamp_id = uuid.uuid1() print(timestamp_id) # 生成紧凑的 22 字符 URL 安全 ID url_safe_id = uuid.uuid4().urn[9:] # 去掉 ‘urn:uuid:’ 前缀 print(url_safe_id) # 输出: f47ac10b58cc4372a5670e02b2c3d479 特点: 标准化的唯一标识符 极低的碰撞概率(1/2^128) 内置 Python 标准库
  • import secrets import string # 生成 16 字节的随机 ID secure_id = secrets.token_urlsafe(16) # 24 字符的 URL 安全字符串 print(secure_id) # 输出类似: Drmhze6EPcv0fN_81Bj-nA # 自定义格式 ID def generate_custom_id(length=16): alphabet = string.ascii_letters + string.digits return ”.join(secrets.choice(alphabet) for _ in range(length)) custom_id = generate_custom_id() print(custom_id) # 输出类似: aB3dEfG7hIj9KlMn 特点: 加密安全的随机数生成器 适合密码、API 密钥等安全敏感场景 防止时序攻击
  • import time import random import string def timestamp_random_id(): # 获取毫秒级时间戳 millis = int(time.time() * 1000) # 生成 6 位随机字符串 rand_str = ”.join(random.choices(string.ascii_uppercase + string.digits, k=6)) return f”{millis}-{rand_str}” print(timestamp_random_id()) # 输出: 1710000000000-AB3D9F 特点: 可读性较好 包含时间信息 适用于低并发场景
  • # 需要先安装: pip install shortuuid import shortuuid # 生成 22 字符的短 UUID short_id = shortuuid.uuid() print(short_id) # 输出类似: vytxeTZskVKR7C7WgdSP3d # 自定义长度 (8-22 字符) custom_short_id = shortuuid.ShortUUID().random(length=10) print(custom_short_id) # 输出类似: 5x4H3dK7Yt 特点: 比标准 UUID 更短 保持唯一性 可自定义字母表
  • import random import string # 模拟数据库自增 ID global_counter = 1000 def distributed_id(): global global_counter global_counter += 1 # 添加 4 位随机后缀防止冲突 suffix = ”.join(random.choices(string.ascii_lowercase + string.digits, k=4)) return f”{global_counter:08d}-{suffix}” print(distributed_id()) # 输出: 00001001-a3b7 特点: 适合分布式系统 包含顺序信息 减少碰撞概率
  • 方法 长度 唯一性 安全性 适用场景 UUID4 36 字符 极高 高 通用唯一标识 Secrets Token 自定义(16+) 高 极高 API 密钥、密码重置令牌 时间戳+随机数 ~20 字符 中 中 日志跟踪、简单应用 ShortUUID 8-22 字符 高 高 URL 短链、用户友好 ID 数据库ID+随机后缀 可变 高 中 分布式系统、订单号
  • 通用场景:使用 uuid.uuid4() 最简单可靠 安全敏感:使用 secrets.token_urlsafe(16) URL 友好:使用 shortuuid.uuid() 或 uuid.uuid4().hex 高并发系统:组合时间戳+机器ID+序列号 import socket import time machine_id = socket.gethostname().hash() % 1000 # 简化的机器标识 sequence = 0 def high_concurrency_id(): global sequence sequence = (sequence + 1) % 10000 millis = int(time.time() * 1000) return f”{millis}{machine_id:04d}{sequence:04d}” 人类可读:使用可发音的组合 import random def human_friendly_id(): adjectives = [‘Red’, ‘Happy’, ‘Swift’, ‘Brave’, ‘Calm’] nouns = [‘Tiger’, ‘Eagle’, ‘River’, ‘Mountain’, ‘Star’] number = random.randint(1000, 9999) return f”{random.choice(adjectives)}{random.choice(nouns)}{number}” print(human_friendly_id()) # 输出: HappyEagle5678 根据具体需求选择合适的方法,大多数情况下 Python 内置的 uuid 模块已经足够满足需求,且能保证极高的唯一性。 到此这篇关于python生成随机唯一id的几种实现方法的文章就介绍到这了,更多相关python生成随机唯一id内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客! 您可能感兴趣的文章: Python中生成不重复ID的方法小结 python如何生成textgrid文件 python 生成唯一id的四种方式 Python利用雪花算法实现生成唯一ID Python 生成短8位唯一id实战教程 python uuid生成唯一id或str的最简单案例 python生成并处理uuid的实现方式 python根据时间生成mongodb的ObjectId的方法
  • 目录
    • 方法 1:使用 UUID 模块(推荐)
    • 方法 2:使用 Secrets 模块(安全敏感场景)
    • 方法 3:时间戳 + 随机数(简单场景)
    • 方法 4:使用 ShortUUID 库(短 ID)
    • 方法 5:数据库自增 ID + 随机后缀(分布式系统)
    • 方法对比表
    • 最佳实践建议

    在 Python 中生成随机唯一 ID 有多种方法,根据不同的需求场景可以选择最适合的方案。以下是 5 种常用方法及其详细实现:

    import uuid
    
    # 生成版本 4 的随机 UUID(最常用)
    unique_id = uuid.uuid4()
    print(unique_id)  # 输出: f47ac10b-58cc-4372-a567-0e02b2c3d479
    print(str(unique_id))  # 转换为字符串
    
    # 生成版本 1 的 UUID(基于时间戳和 MAC 地址)
    timestamp_id = uuid.uuid1()
    print(timestamp_id)
    
    # 生成紧凑的 22 字符 URL 安全 ID
    url_safe_id = uuid.uuid4().urn[9:]  # 去掉 'urn:uuid:' 前缀
    print(url_safe_id)  # 输出: f47ac10b58cc4372a5670e02b2c3d479

    特点

    • 标准化的唯一标识符
    • 极低的碰撞概率(1/2^128)
    • 内置 Python 标准库

    import secrets
    import string
    
    # 生成 16 字节的随机 ID
    secure_id = secrets.token_urlsafe(16)  # 24 字符的 URL 安全字符串
    print(secure_id)  # 输出类似: Drmhze6EPcv0fN_81Bj-nA
    
    # 自定义格式 ID
    def generate_custom_id(length=16):
        alphabet = string.ascii_letters + string.digits
        return ''.join(secrets.choice(alphabet) for _ in range(length))
    
    custom_id = generate_custom_id()
    print(custom_id)  # 输出类似: aB3dEfG7hIj9KlMn

    特点

    • 加密安全的随机数生成器
    • 适合密码、API 密钥等安全敏感场景
    • 防止时序攻击

    import time
    import random
    import string
    
    def timestamp_random_id():
        # 获取毫秒级时间戳
        millis = int(time.time() * 1000)
        # 生成 6 位随机字符串
        rand_str = ''.join(random.choices(string.ascii_uppercase + string.digits, k=6))
        return f"{millis}-{rand_str}"
    
    print(timestamp_random_id())  # 输出: 1710000000000-AB3D9F

    特点

    • 可读性较好
    • 包含时间信息
    • 适用于低并发场景

    # 需要先安装: pip install shortuuid
    import shortuuid
    
    # 生成 22 字符的短 UUID
    short_id = shortuuid.uuid()
    print(short_id)  # 输出类似: vytxeTZskVKR7C7WgdSP3d
    
    # 自定义长度 (8-22 字符)
    custom_short_id = shortuuid.ShortUUID().random(length=10)
    print(custom_short_id)  # 输出类似: 5x4H3dK7Yt

    特点

    • 比标准 UUID 更短
    • 保持唯一性
    • 可自定义字母表

    import random
    import string
    
    # 模拟数据库自增 ID
    global_counter = 1000
    
    def distributed_id():
        global global_counter
        global_counter += 1
        # 添加 4 位随机后缀防止冲突
        suffix = ''.join(random.choices(string.ascii_lowercase + string.digits, k=4))
        return f"{global_counter:08d}-{suffix}"
    
    print(distributed_id())  # 输出: 00001001-a3b7

    特点

    • 适合分布式系统
    • 包含顺序信息
    • 减少碰撞概率

    方法 长度 唯一性 安全性 适用场景
    UUID4 36 字符 极高 通用唯一标识
    Secrets Token 自定义(16+) 极高 API 密钥、密码重置令牌
    时间戳+随机数 ~20 字符 日志跟踪、简单应用
    ShortUUID 8-22 字符 URL 短链、用户友好 ID
    数据库ID+随机后缀 可变 分布式系统、订单号

    • 通用场景:使用 uuid.uuid4() 最简单可靠
    • 安全敏感:使用 secrets.token_urlsafe(16)
    • URL 友好:使用 shortuuid.uuid() 或 uuid.uuid4().hex
    • 高并发系统:组合时间戳+机器ID+序列号
    import socket
    import time
    
    machine_id = socket.gethostname().hash() % 1000  # 简化的机器标识
    sequence = 0
    
    def high_concurrency_id():
        global sequence
        sequence = (sequence + 1) % 10000
        millis = int(time.time() * 1000)
        return f"{millis}{machine_id:04d}{sequence:04d}"

    人类可读:使用可发音的组合

    import random
    
    def human_friendly_id():
        adjectives = ['Red', 'Happy', 'Swift', 'Brave', 'Calm']
        nouns = ['Tiger', 'Eagle', 'River', 'Mountain', 'Star']
        number = random.randint(1000, 9999)
        return f"{random.choice(adjectives)}{random.choice(nouns)}{number}"
    
    print(human_friendly_id())  # 输出: HappyEagle5678

    根据具体需求选择合适的方法,大多数情况下 Python 内置的 uuid 模块已经足够满足需求,且能保证极高的唯一性。

    到此这篇关于python生成随机唯一id的几种实现方法的文章就介绍到这了,更多相关python生成随机唯一id内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客!

    您可能感兴趣的文章:

    • Python中生成不重复ID的方法小结
    • python如何生成textgrid文件
    • python 生成唯一id的四种方式
    • Python利用雪花算法实现生成唯一ID
    • Python 生成短8位唯一id实战教程
    • python uuid生成唯一id或str的最简单案例
    • python生成并处理uuid的实现方式
    • python根据时间生成mongodb的ObjectId的方法

    站内搜索