資料:
Python官方Doc:《20.15. uuid — UUID objects according to RFC 4122》
UUID的算法介紹:《A Universally Unique IDentifier (UUID) URN Namespace》
概述:
UUID是128位的全局唯一標(biāo)識符,通常由32字節(jié)的字符串表示幻锁。
它可以保證時間和空間的唯一性,也稱為GUID嚷节,全稱為:
UUID —— Universally Unique IDentifier Python 中叫 UUID
GUID —— Globally Unique IDentifier C# 中叫 GUID
它通過MAC地址、時間戳祭犯、命名空間帘瞭、隨機(jī)數(shù)、偽隨機(jī)數(shù)來保證生成ID的唯一性吊圾。
UUID主要有五個算法,也就是五種方法來實現(xiàn):
1翰蠢、uuid1()——基于時間戳
由MAC地址项乒、當(dāng)前時間戳、隨機(jī)數(shù)生成梁沧√春危可以保證全球范圍內(nèi)的唯一性,
但MAC的使用同時帶來安全性問題廷支,局域網(wǎng)中可以使用IP來代替MAC频鉴。
2、uuid2()——基于分布式計算環(huán)境DCE(Python中沒有這個函數(shù))
算法與uuid1相同酥泞,不同的是把時間戳的前4位置換為POSIX的UID。
實際中很少用到該方法啃憎。
3芝囤、uuid3()——基于名字的MD5散列值
通過計算名字和命名空間的MD5散列值得到,保證了同一命名空間中不同名字的唯一性,
和不同命名空間的唯一性悯姊,但同一命名空間的同一名字生成相同的uuid羡藐。
4、uuid4()——基于隨機(jī)數(shù)
由偽隨機(jī)數(shù)得到悯许,有一定的重復(fù)概率仆嗦,該概率可以計算出來。
5先壕、uuid5()——基于名字的SHA-1散列值
算法與uuid3相同瘩扼,不同的是使用 Secure Hash Algorithm 1 算法
使用方面:
首先,Python中沒有基于DCE的垃僚,所以uuid2可以忽略集绰;
其次,uuid4存在概率性重復(fù)谆棺,由無映射性栽燕,最好不用;
再次改淑,若在Global的分布式計算環(huán)境下碍岔,最好用uuid1;
最后朵夏,若有名字的唯一性要求蔼啦,最好用uuid3或uuid5。
編碼方法:
# -*- coding: utf-8 -*-
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)