Python學習筆記:利用UUID模塊隨機生成36位長度字符串


一、背景介紹

UUID(Universally Unique Identifier) 是通用唯一識別碼。

對於所有的 UUID 它可以保證在空間和時間上的唯一性,它使通過 MAC 地址、時間戳、命名空間、隨機數、偽隨機數等參數來保證生成 ID 的唯一性。

擁有着固定的大小(128bit)。

它的唯一性和一致性特點使得可以無需注冊過程就能夠產生一個新的 UUID

UUID 可以被用作多種用途,既可以用來短時間內標記一個對象,也可以可靠的辨別網絡中的持久性對象。

二、uuid模塊介紹

Python 中的 uuid 包提供 uuid1()uuid3()uuid4()uuid5() 來生成各個版本的 uuid

注意:沒有 uuid2() 函數。

1.uuid.uuid1 基於時間戳

使用主機 ID、序列號和當前時間戳來生成 UUID,可保證唯一性。

涉及主機網絡地址,可能危及隱私。

使用語法:

uuid.uuid1([node [, clock_seq]])
-- node 未指定時自動調用getnode()獲取主機硬件地址
-- clock_seq 參數未指定系統會使用一個隨機產生的14位序列號來代替

2.uuid.uuid3 基於名字的MD5散列值

通過計算命名空間和名字的MD5哈希值來生成 UUID, 可以保證唯一性。

使用語法:

uuid.uuid3(namespace, name)

3.uuid.uuid4 基於隨機數

通過隨機數來生成 UUID, 使用的是偽隨機數,有一定的重復概率。

uuid.uuid4() # 不帶任何參數

4.uuid.uuid5 基於名字的SHA-1散列值

通過計算命名空間和名字的 SHA-1 哈希值來生成 UUID, 算法與 uuid.uuid3() 相同。

uuid.uuid5(namespace, name)

三、實操

輸出結果均為36個字符。

import uuid

uuid.uuid1() # UUID('29cfec4a-5909-11ec-bc6d-005056c00008')

uuid.uuid3(uuid.NAMESPACE_DNS, 'python.org') # UUID('6fa459ea-ee8a-3ca4-894e-db77e160355e')

uuid.uuid4() # UUID('cd5187a2-6dd6-49a8-8934-1a3911a3d2f0')

uuid.uuid5(uuid.NAMESPACE_DNS, 'python.org') # UUID('886313e1-3b8a-5372-9b90-0c9aee199e5d')

x = uuid.UUID('{00010203-0405-0607-0809-0a0b0c0d0e0f}')
str(x) # '00010203-0405-0607-0809-0a0b0c0d0e0f'
x.bytes # b'\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f'
uuid.UUID(bytes=x.bytes) # UUID('00010203-0405-0607-0809-0a0b0c0d0e0f')

UUID 中間的 ”-“ 可利用以下腳本替換:

xx = str(uuid.uuid4()) # '8881d110-9788-4221-84ff-0a5e62224250'

# 方法一
xx.replace('-','') # '8881d1109788422184ff0a5e62224250'

# 方法二
''.join(xx.split('-')) # '8881d1109788422184ff0a5e62224250'

# 方法三
uuid.UUID('{8881d110-9788-4221-84ff-0a5e62224250}').hex # '8881d1109788422184ff0a5e62224250'

參考鏈接:python uuid 介紹

參考鏈接:python生成並處理uuid的方法


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM