创建唯一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'>
posted @ 2020-06-15 22:40  给你加马桶唱疏通  阅读(335)  评论(0编辑  收藏  举报