一、背景介紹
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的方法