uuid
UUID 是 通用唯一识别码(Universally Unique Identifier)的缩写,是一种软件建构的标准。其目的,是让分布式系统中的所有元素,都能有唯一的辨识信息,而不需要通过中央控制端来做辨识信息的指定。uuid可以根据不同的条件生成不同的验证码,并且这些验证码之间没有任何联系,通过观察一个验证码无法猜测出其他的验证码,很适合作为unique_id的生成
Python中五种uuid生成方法
在Python中,如果要使用uuid生成验证码,前提import uuid
- uuid.uuid1() 基于MAC地址、时间戳、随机数来生成唯一的uuid
- uuid.uuid2() 基于分布式计算环境DCE(python中没有该函数),算法与uuid1相同,但是将时间戳的前四位换成posix的UID
- uuid.uuid3() 基于计算名字与命名空间,同一命名空间不同名字结果不同,同一名字不同命名空间结果不同,但是相同名字相同命名空间会是结果一直
- uuid.uuid4() 基于(伪)随机数,有一定的重复概率
- uuid.uuid5() 基于名字,与算法uuid3大致相同
实例
import uuid
name = "asdasd" #随机设定
#namespace = "sdfsdf" #随机设定
namespace = uuid.NAMESPACE_URL#个人认为这是最靠谱的一种使用方法
x1 = uuid.uuid1()
#Python中不存在uuid2
x3 = uuid.uuid3(namespace,name)
x4 = uuid.uuid4()
x5 = uuid.uuid5(namespace,name)
注意事项
- Python中没有基于分布式计算环境DCE,故uuid2不使用
- uuid4为伪随机数,有一定概率重复,一般不使用
- uuid1适合全球范围内的环境下使用
- uuid3与uuid5是最常用的,同时也可以满足一种控制变量法的设定随机变量,在购票系统中就可以设定同一个名字但是不同的票种,便会生成几乎没有任何关系的unique_id
- 其实,uuid3和uuid5的使用对命名空间与名字的要求并不严格,对名字而言,完全可以采用同样的名字然后加上当时的时间戳,便可以产生完全不同的结果
参考
https://www.cnblogs.com/dkblog/archive/2011/10/10/2205200.html
https://baike.baidu.com/item/UUID/5921266?fr=aladdin
https://www.cnblogs.com/franknihao/p/7307224.html