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

2025-07-15 19:50

本文主要是介绍python生成随机唯一id的几种实现方法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

《python生成随机唯一id的几种实现方法》在Python中生成随机唯一ID有多种方法,根据不同的需求场景可以选择最适合的方案,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习...

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

方法php 1:使用 UUID 模块(推荐)

import uuid

# 生成版本 4 的随机 UUID(最常用)
unique_id = uuid.uuid4()
print(unique_id)  # 输出: f47ac10b-58cc-4372-a567-0e02b2c3d479
print(str(unique_id))  # 转换为字符串

# 生成版本python 1 的 UUID(基于时间戳和 MAC 地址)
timestamp_id = uuid.uuid1()
print(timestamp_id)

# 生成紧凑的 22 字符 www.chinasem.cnURL 安全 ID
url_safe_id = uuid.uuid4().urn[9:]  # 去掉 'urn:uuid:' 前缀
print(url_safe_id)  # 输出: f47ac10b58cc4372a5670e02b2c3d479

特点

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

方法 2:使用 Secrets 模块(安全敏感场景)

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 密钥等安全敏感场景
  • 防止时序攻击

方法 3:时间戳 + 随机数(简单场景)

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

特点

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

方法 4:使用 ShortUUID 库(短 ID)

# 需要先安装: 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 更短
  • 保持唯一性
  • 可自定义字母表

方法 5:数据库自增 ID + 随机后缀(分布式系统)

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

特点

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

方法对比表

方法长度唯一性安全性适用场景
UUID436 字符极高通用唯一标识
Secrets Token自定义(16+)极高API 密钥、密码重置令牌
时间戳+随机数~20 字符日志跟踪、简单应用
ShortUUID8-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 模块已经足够满足需求,且能保证极高的唯一性。

到此这javascript篇关于python生成随机唯一id的几种实现方法的文章就介绍到这了,更多相关python生成随机唯一id内容请搜索China编程(www.chinasem.cn)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程China编程(www.chinasem.cn)!

这篇关于python生成随机唯一id的几种实现方法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1155391

相关文章

Nginx安全防护的多种方法

《Nginx安全防护的多种方法》在生产环境中,需要隐藏Nginx的版本号,以避免泄漏Nginx的版本,使攻击者不能针对特定版本进行攻击,下面就来介绍一下Nginx安全防护的方法,感兴趣的可以了解一下... 目录核心安全配置1.编译安装 Nginx2.隐藏版本号3.限制危险请求方法4.请求限制(CC攻击防御)

MyBatis-Plus通用中等、大量数据分批查询和处理方法

《MyBatis-Plus通用中等、大量数据分批查询和处理方法》文章介绍MyBatis-Plus分页查询处理,通过函数式接口与Lambda表达式实现通用逻辑,方法抽象但功能强大,建议扩展分批处理及流式... 目录函数式接口获取分页数据接口数据处理接口通用逻辑工具类使用方法简单查询自定义查询方法总结函数式接口

MySQL深分页进行性能优化的常见方法

《MySQL深分页进行性能优化的常见方法》在Web应用中,分页查询是数据库操作中的常见需求,然而,在面对大型数据集时,深分页(deeppagination)却成为了性能优化的一个挑战,在本文中,我们将... 目录引言:深分页,真的只是“翻页慢”那么简单吗?一、背景介绍二、深分页的性能问题三、业务场景分析四、

JAVA中安装多个JDK的方法

《JAVA中安装多个JDK的方法》文章介绍了在Windows系统上安装多个JDK版本的方法,包括下载、安装路径修改、环境变量配置(JAVA_HOME和Path),并说明如何通过调整JAVA_HOME在... 首先去oracle官网下载好两个版本不同的jdk(需要登录Oracle账号,没有可以免费注册)下载完

Spring StateMachine实现状态机使用示例详解

《SpringStateMachine实现状态机使用示例详解》本文介绍SpringStateMachine实现状态机的步骤,包括依赖导入、枚举定义、状态转移规则配置、上下文管理及服务调用示例,重点解... 目录什么是状态机使用示例什么是状态机状态机是计算机科学中的​​核心建模工具​​,用于描述对象在其生命

Spring Boot 结合 WxJava 实现文章上传微信公众号草稿箱与群发

《SpringBoot结合WxJava实现文章上传微信公众号草稿箱与群发》本文将详细介绍如何使用SpringBoot框架结合WxJava开发工具包,实现文章上传到微信公众号草稿箱以及群发功能,... 目录一、项目环境准备1.1 开发环境1.2 微信公众号准备二、Spring Boot 项目搭建2.1 创建

IntelliJ IDEA2025创建SpringBoot项目的实现步骤

《IntelliJIDEA2025创建SpringBoot项目的实现步骤》本文主要介绍了IntelliJIDEA2025创建SpringBoot项目的实现步骤,文中通过示例代码介绍的非常详细,对大家... 目录一、创建 Spring Boot 项目1. 新建项目2. 基础配置3. 选择依赖4. 生成项目5.

使用Python删除Excel中的行列和单元格示例详解

《使用Python删除Excel中的行列和单元格示例详解》在处理Excel数据时,删除不需要的行、列或单元格是一项常见且必要的操作,本文将使用Python脚本实现对Excel表格的高效自动化处理,感兴... 目录开发环境准备使用 python 删除 Excphpel 表格中的行删除特定行删除空白行删除含指定

Linux下删除乱码文件和目录的实现方式

《Linux下删除乱码文件和目录的实现方式》:本文主要介绍Linux下删除乱码文件和目录的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux下删除乱码文件和目录方法1方法2总结Linux下删除乱码文件和目录方法1使用ls -i命令找到文件或目录

SpringBoot+EasyExcel实现自定义复杂样式导入导出

《SpringBoot+EasyExcel实现自定义复杂样式导入导出》这篇文章主要为大家详细介绍了SpringBoot如何结果EasyExcel实现自定义复杂样式导入导出功能,文中的示例代码讲解详细,... 目录安装处理自定义导出复杂场景1、列不固定,动态列2、动态下拉3、自定义锁定行/列,添加密码4、合并