python之uuid通用唯一識別符號模組
長安古道馬遲遲,高柳亂蟬嘶。夕陽島外,秋風原上,目斷四天垂。
歸雲一去無蹤跡,何處是前期?狎興生疏,酒徒蕭索,不似少年時。
一、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
相關文章
- Android開發 - UUID 類通用唯一識別符號解析AndroidUI符號
- js如何生成唯一識別符號UUIDJS符號UI
- python的識別符號Python符號
- AppID 的英文全稱是 Application Identifier AppID(應用程式識別符號)GUID(全域性唯一識別符號)APPIDE符號GUI
- 識別符號符號
- python:LEGB識別符號解析順序Python符號
- 如何生成分散式唯一時間戳識別符號 - vanillajava分散式時間戳符號Java
- [MySQL] MySQL資料庫中唯一識別符號(ID)的梳理總結MySql資料庫符號
- 使用去中心化識別符號 (DID) 作為識別符號元系統中心化符號
- <Python>識別符號、變數的定義與使用Python符號變數
- C++11新特性之final override識別符號C++IDE符號
- Java資料型別、識別符號Java資料型別符號
- Python中的識別符號有哪些基礎原則?Python符號
- java基本無法-識別符號Java符號
- C語言-識別符號命名C語言符號
- 識別符號與關鍵字符號
- 分散式系統唯一主鍵識別符號ID生成機制比較 - Encore分散式符號
- Python中合法識別符號需要滿足什麼條件?Python符號
- Python行結構與縮排、 識別符號和保留字Python符號
- Python模組之urllib模組Python
- python模組之collections模組Python
- go——識別符號的命名規範Go符號
- 字串切片識別符號是什麼字串符號
- JavaSE 關鍵字和識別符號Java符號
- URI(統一資源識別符號)符號
- 1413: C語言合法識別符號C語言符號
- SCSS &父選擇器識別符號CSS符號
- 關鍵字、資料型別、識別符號資料型別符號
- Python技術分享:Python中的識別符號有哪些基礎原則?Python符號
- python之模組Python
- JAVA-識別符號、變數、資料型別Java符號變數資料型別
- C語言合法識別符號 hd 2024C語言符號
- java:識別符號 關鍵字 變數Java符號變數
- C++ 提示未宣告的識別符號C++符號
- 為什麼python中使用模組無法識別Python
- python模組之configparserPython
- python模組之hashlibPython
- Python模組之jsonPythonJSON