python生成隨機唯一id的幾種實現(xiàn)方法
在 Python 中生成隨機唯一 ID 有多種方法,根據(jù)不同的需求場景可以選擇最適合的方案。以下是 5 種常用方法及其詳細實現(xiàn):
方法 1:使用 UUID 模塊(推薦)
import uuid # 生成版本 4 的隨機 UUID(最常用) unique_id = uuid.uuid4() print(unique_id) # 輸出: f47ac10b-58cc-4372-a567-0e02b2c3d479 print(str(unique_id)) # 轉(zhuǎn)換為字符串 # 生成版本 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)
- 內(nèi)置 Python 標準庫
方法 2:使用 Secrets 模塊(安全敏感場景)
import secrets import string # 生成 16 字節(jié)的隨機 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
特點:
- 加密安全的隨機數(shù)生成器
- 適合密碼、API 密鑰等安全敏感場景
- 防止時序攻擊
方法 3:時間戳 + 隨機數(shù)(簡單場景)
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
特點:
- 可讀性較好
- 包含時間信息
- 適用于低并發(fā)場景
方法 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:數(shù)據(jù)庫自增 ID + 隨機后綴(分布式系統(tǒng))
import random import string # 模擬數(shù)據(jù)庫自增 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
特點:
- 適合分布式系統(tǒng)
- 包含順序信息
- 減少碰撞概率
方法對比表
方法 | 長度 | 唯一性 | 安全性 | 適用場景 |
---|---|---|---|---|
UUID4 | 36 字符 | 極高 | 高 | 通用唯一標識 |
Secrets Token | 自定義(16+) | 高 | 極高 | API 密鑰、密碼重置令牌 |
時間戳+隨機數(shù) | ~20 字符 | 中 | 中 | 日志跟蹤、簡單應(yīng)用 |
ShortUUID | 8-22 字符 | 高 | 高 | URL 短鏈、用戶友好 ID |
數(shù)據(jù)庫ID+隨機后綴 | 可變 | 高 | 中 | 分布式系統(tǒng)、訂單號 |
最佳實踐建議
- 通用場景:使用 uuid.uuid4() 最簡單可靠
- 安全敏感:使用 secrets.token_urlsafe(16)
- URL 友好:使用 shortuuid.uuid() 或 uuid.uuid4().hex
- 高并發(fā)系統(tǒng):組合時間戳+機器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}"
人類可讀:使用可發(fā)音的組合
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
根據(jù)具體需求選擇合適的方法,大多數(shù)情況下 Python 內(nèi)置的 uuid
模塊已經(jīng)足夠滿足需求,且能保證極高的唯一性。
到此這篇關(guān)于python生成隨機唯一id的幾種實現(xiàn)方法的文章就介紹到這了,更多相關(guān)python生成隨機唯一id內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Mac 安裝 Python3.10 和 配置環(huán)境的詳細教程
這篇文章主要介紹了Mac 安裝 Python3.10 和 配置環(huán)境,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-05-05PyTorch中dataloader制作自定義數(shù)據(jù)集的實現(xiàn)示例
本文主要介紹了PyTorch中dataloader制作自定義數(shù)據(jù)集的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2025-05-05Python實現(xiàn)批量壓縮解壓文件(zip、rar)
Python是一種廣泛使用的編程語言,非常適合處理各種任務(wù),包括批量解壓縮文件,本文主要介紹了Python實現(xiàn)批量壓縮解壓文件,具有一定的參考價值,感興趣的可以了解一下2023-09-09