1. 程式人生 > >Python 標準庫 —— uuid(生成唯一 ID)

Python 標準庫 —— uuid(生成唯一 ID)

有時我們在百度貼吧,在一個網站,儲存網頁上的一些圖片時,圖片名有時會是一串很長的數字和字母組成的,但無一例外,影象之間不會出現重名。這個唯一的 id,一般通過 uuid 的方式獲得,uuid 根據的是從 1970年1月1日到現在經歷的秒數。

1. 基礎

UUID 是 128 位的全域性唯一識別符號,通常由 32 位元組的字串(十六進位制)表示。

它可以保證時間和空間的唯一性,也稱為GUID,全稱為:

  • UUID —— Universally Unique IDentifier Python 中叫 UUID
  • GUID —— Globally Unique IDentifier C# 中叫 GUID

它通過MAC地址、時間戳、名稱空間、隨機數、偽隨機數來保證生成 ID 的唯一性。

UUID主要有五個演算法,也就是五種方法來實現:

  • 1、uuid1()——基於時間戳

    由 MAC 地址(主機實體地址)、當前時間戳、隨機數生成。可以保證全球範圍內的唯一性,
    但 MAC 的使用同時帶來安全性問題,區域網中可以使用 IP 來代替MAC。

    注意 uuid1() 返回的不是普通的字串,而是一個 uuid 物件,其內含有豐富的成員函式和變數。

  • 2、uuid2()——基於分散式計算環境DCE(Python中沒有這個函式)

    演算法與uuid1相同,不同的是把時間戳的前 4 位置換為 POSIX 的 UID。
    實際中很少用到該方法。

  • 3、uuid3()——基於名字的MD5雜湊值

    通過計算名字和名稱空間的MD5雜湊值得到,保證了同一名稱空間中不同名字的唯一性,
    和不同名稱空間的唯一性,但同一名稱空間的同一名字生成相同的uuid。

  • 4、uuid4()——基於隨機數

    由偽隨機數得到,有一定的重複概率,該概率可以計算出來。

  • 5、uuid5()——基於名字的SHA-1雜湊值

    演算法與uuid3相同,不同的是使用 Secure Hash Algorithm 1 演算法

2. 實戰

使用方面:

首先,Python中沒有基於 DCE 的,所以uuid2可以忽略;
其次,uuid4存在概率性重複,由無對映性,最好不用;
再次,若在Global的分散式計算環境下,最好用uuid1;
最後,若有名字的唯一性要求,最好用uuid3或uuid5。

import uuid

name = "test_name"
namespace = "test_namespace"

print uuid.uuid1()  # 帶參的方法參見Python Doc
print uuid.uuid3(namespace, name)
print uuid.uuid4()
print uuid.uuid5(namespace, name)