你就是我的唯一。在程式中也需要這樣一個唯一的標識,UUID就誕生了。
一、 概述
UUID是128位的通用唯一識別碼,通常由32位元組的字串表示。
它可以保證時間和空間的唯一性,也稱為GUID,全稱為:
UUID —— Universally Unique IDentifier Python 中叫 UUID
GUID —— Globally Unique IDentifier C# 中叫 GUID
它通過MAC地址、時間戳記、命名空間、隨機數、偽隨機數來保證產生ID的唯一性。
二、uuid的演算法
UUID主要有五個演算法,也就是五種方法來實現:
1、uuid1()——基於時間戳記
由MAC地址、目前時間戳、隨機數產生。可以保證全球範圍內的唯一性,
但MAC的使用同時帶來安全性問題,區域網路中可以使用IP來代替MAC。
2、uuid2()——基於分散式運算環境DCE(Python中沒有這個函數)
演算法與uuid1相同,不同的是把時間戳記的前4位置換為POSIX的UID。
實際中很少用到該方法。
3、uuid3()——基於名字的MD5散列值
通過計算名字和命名空間的MD5散列值得到,保證了同一命名空間中不同名字的唯一性,
和不同命名空間的唯一性,但同一命名空間的同一名字產生相同的uuid。
4、uuid4()——基於隨機數
由偽隨機數得到,有一定的重複機率,該機率可以計算出來。
5、uuid5()——基於名字的SHA-1散列值
演算法與uuid3相同,不同的是使用 Secure Hash Algorithm 1 演算法
在使用方面:
首先,Python中沒有基於DCE的,所以uuid2可以忽略;
其次,uuid4存在機率性重複,由無映射性,最好不用;
再次,若在Global的分散式運算環境下,最好用uuid1;
最後,若有名字的唯一性要求,最好用uuid3或uuid5。
三、編碼實踐
import uuidname = "test_name"print uuid.uuid1() # 帶參的方法參見Python Docprint uuid.uuid3(uuid.NAMESPACE_DNS, name)print uuid.uuid4()print uuid.uuid5(uuid.NAMESPACE_DNS, name)#271195ee-74b1-11e4-88b1-600308a572a2#7e9fc176-3b19-394a-9530-83391161f8e9#f38e76ba-4d54-43e9-81b5-6d96be63b878#ad85ae8c-f638-56e0-b9fc-5d7a58009f62
so easy~