创建唯一id之uuid
创建唯一id之uuid
1、uuid1()——基于时间戳
- 1.如何生成?
- MAC地址、当前时间戳、随机数生成
- 2.优点:
- 保证全球范围内的唯一性
- 3.缺点:
- MAC的使用同时带来安全性问题,局域网中可以使用IP来代替MAC
2、uuid2()——基于分布式计算环境DCE(Python中没有这个函数)
- 算法与uuid1相同,不同的是把时间戳的前4位置换为POSIX的UID。
实际中很少用到该方法。
3、uuid3()——基于名字的MD5散列值
- 1.如何生成?
- 通过计算名字和命名空间的MD5散列值得到
- 2.优点:
- 保证了同一命名空间中不同名字的唯一性,和不同命名空间的唯一性
- 3.缺点:
- 同一命名空间的同一名字生成相同的uuid
4、uuid4()——基于随机数
- 1.如何生成?
- 伪随机数得到
- 2.优点:
- 暂无
- 3.缺点:
- 有一定的重复概率,该概率可以计算出来
5、uuid5()——基于名字的SHA-1散列值
- 1.如何生成?
- 算法与uuid3相同, 不同的是使用 Secure Hash Algorithm 1 算法
- 2.优点: 暂无
- 3.缺点: 暂无
6. 使用方面:
首先,Python中没有基于DCE的,所以uuid2可以忽略;
其次,uuid4存在概率性重复,由无映射性,最好不用;
再次,若在Global的分布式计算环境下,最好用uuid1;
最后,若有名字的唯一性要求,最好用uuid3或uuid5。
7. 代码示例:
# 注意: 它们的返回值类型是一个类, 如果你想作为字符串拼接请使用str()函数进行转换
import uuid
name = "test_name"
namespace = uuid.NAMESPACE_DNS
res = uuid.uuid1()
print(res, type(res)) # c966c44a-af15-11ea-b9d2-48ba4e4e6384 <class 'uuid.UUID'>
res = uuid.uuid3(namespace, name)
print(res, type(res)) # 7e9fc176-3b19-394a-9530-83391161f8e9 <class 'uuid.UUID'>
res = uuid.uuid4()
print(res, type(res)) # 4c57ba48-560d-4a11-bdd4-df628b145d44 <class 'uuid.UUID'>
res = uuid.uuid5(namespace, name)
print(res, type(res)) # ad85ae8c-f638-56e0-b9fc-5d7a58009f62 <class 'uuid.UUID'>