Python uuid
UUID是128位的全局唯一標識符,通常由32字節的字符串表示。
它可以保證時間和空間的唯一性,也稱為GUID,全稱為:
??UUID Universally unique IDentifier python 中叫UUID
??GUID Globally Unique IDentifier C#中叫GUID
它是通過MAC地址、時間戳、命名空間、隨機數、偽隨機數來保證生成ID的唯一性。
UUID主要有5個算法,也就是5中方法來實現:
?uuid1() --- 基于時間戳
??由MAC地址、當前時間戳、隨機數生成。可以保證全球范圍內的唯一性,但MAC的使用同時帶來了安全性問題,局域網中可以使用IP來代替MAC。
?uuid2() -- 基于分布式計算環境DCE(python 中沒有這個函數)
??算法與uuid1相同,不同的是把時間戳的前4位置換為POSIX的UID。實際中很少使用
?uuid3() --- 基于名字的MD5散列值
??通過計算名字和命名空間的MD5散列值得到,保證了同一命名空間中不同名字的唯一性,和不同命名空間的唯一性,但同一命名空間的同一名字生成相同的uuid。
?uuid4() --- 基于隨機數
??由偽隨機數得到,有一定的重復概率,該概率可以計算出來。
?uuid5() ---基于名字的SHA-1散列值
??算法與uuid3相同,不同的是使用secure Hash Algorithm 1算法。
使用方面:
??python 中沒有基于DCE的,所有uuid2可以忽略;
??uuid4存在概率性重復,由無映射性,最好不用;
??在Global的分布式計算環境下,最好用uuid1;
??有名字的唯一性要求,最好用uuid3或uuid5
def get_uuid( name ):
import uuid
num = -8
dir(uuid.uuid4())
namespace = uuid.NAMESPACE_URL
mid = uuid.uuid5(namespace, name)
if six.PY2:
return mid.get_hex()[ num:]
else:
return str(mid)[ num: ]
if __name__ == "__main__":
print(get_uuid("ss")) # 9242cb54