python之uuid通用唯一識別符號模組

slashboywang發表於2018-10-18

長安古道馬遲遲,高柳亂蟬嘶。夕陽島外,秋風原上,目斷四天垂。
歸雲一去無蹤跡,何處是前期?狎興生疏,酒徒蕭索,不似少年時。

一、UUID的介紹:

UUID: 通用唯一識別符號 ( Universally Unique Identifier ), 對於所有的UUID它可以保證在空間和時間上的唯一性. 它是通過MAC地址, 時間戳, 名稱空間, 隨機數, 偽隨機數來保證生成ID的唯一性, 有著固定的大小( 128 bit ). 它的唯一性和一致性特點使得可以無需註冊過程就能夠產生一個新的UUID. UUID可以被用作多種用途, 既可以用來短時間內標記一個物件, 也可以可靠的辨別網路中的永續性物件.
  為什麼要使用UUID?
  很多應用場景需要一個id, 但是又不要求這個id 有具體的意義, 僅僅用來標識一個物件. 常見的例子有資料庫表的id 欄位. 另一個例子是前端的各種UI庫, 因為它們通常需要動態建立各種UI元素, 這些元素需要唯一的id , 這時候就需要使用UUID了.

二、uuid模組的使用:

python的uuid模組提供UUID類和函式uuid1(), uuid3(), uuid4(), uuid5() 來生成1, 3, 4, 5各個版本的UUID ( 需要注意的是: python中沒有uuid2()這個函式). 對uuid模組中最常用的幾個函式總結如下:

  • uuid.uuid1(node, clock_seq) : 基於MAC地址,時間戳,隨機數  
    基於MAC地址,時間戳,隨機數來生成唯一的uuid,可以保證全球範圍內的唯一性。但由於使用該方法生成的UUID中包含有主機的網路地址, 因此可能危及隱私。 該函式有兩個引數, 如果 node 引數未指定, 系統將會自動呼叫 getnode() 函式來獲取主機的硬體地址. 如果 clock_seq 引數未指定系統會使用一個隨機產生的14位序列號來代替

  • uuid.uuid2()  
    演算法與uuid1相同,不同的是把時間戳的前4位置換為POSIX的UID。不過需要注意的是python中沒有基於DCE的演算法,所以python的uuid模組中沒有uuid2這個方法。

  • uuid.uuid3(namespace, name) : 基於名字的MD5雜湊值  
    通過計算一個名稱空間和名字的md5雜湊值來給出一個uuid,所以可以保證名稱空間中的不同名字具有不同的uuid,但是相同的名字就是相同的uuid了。namespace並不是一個自己手動指定的字串或其他量,而是在uuid模組中本身給出的一些值。比如uuid.NAMESPACE_DNS,uuid.NAMESPACE_OID,uuid.NAMESPACE_OID這些值。這些值本身也是UUID物件,根據一定的規則計算得出。

  • uuid.uuid4() : 基於隨機數  
    通過隨機數來生成UUID. 使用的是偽隨機數有一定的重複概率

  • uuid.uuid5(namespace, name) : 基於名字的SHA-1雜湊值  
    和uuid3基本相同,只不過採用的雜湊演算法是sha1

三、uuid的簡單使用:

import uuid

name = `wangjifei`
namespace = uuid.NAMESPACE_OID

print(uuid.uuid1())
print(uuid.uuid3(namespace,name))
print(uuid.uuid4())
print(uuid.uuid5(namespace,name))

42a5d474-d276-11e8-be0c-001cc2340bf8
1c0451f9-4b46-381a-8039-43ecc91bc0c0
c5207330-6c9c-4285-bcca-163e24aaeac3
41e1be5c-b568-5e5d-8ce2-f4609fd3bec5


相關文章