UUID:通用唯一识别码(Universally Unique Identifier)
使用场景
在需要用唯一ID的场合,例如用户编号、订单编号、客户编号等等,存到数据库中以便于我们将来进行查询。
生成uuid的几种方法
python中的uuid模块基于信息如MAC地址、时间戳、命名空间、随机数、伪随机数来uuid。具体方法有如下几个:
函数 | 说明 |
---|---|
uuid.uuid1() | 基于MAC地址,时间戳,随机数来生成唯一的uuid,可以保证全球范围内的唯一性 。 |
uuid.uuid2() | 算法与uuid1相同,不同的是把时间戳的前4位置换为POSIX的UID。因为python中没有基于DCE的算法,所以python的uuid模块中无此方法。
|
uuid.uuid3(namespace,name) | 通过计算一个命名空间和名字的md5散列值来给出一个uuid,所以可以保证命名空间中的不同名字具有不同的uuid,但是相同的名字就是相同的uuid 。 |
uuid.uuid4() | 通过伪随机数得到uuid, 有一定概率重复 。 |
uuid.uuid5(namespace,name)() | 和uuid3基本相同,只不过采用的散列算法是sha1。 |
——引用自《每天一个小程序—第0001题(uuid模块)》
代码示例如下:
import uuid
if __name__ == "__main__":
uuid_demo = uuid.uuid1()
uuid_demo_hex = uuid_demo.hex
print(f"变量uuid_demo的值:{uuid_demo}")
print(f"变量uuid_demo的类型:{type(uuid_demo)}")
print()
uuid_demo_str = str(uuid.uuid1())
print(f"变量uuid_demo_str的值:{uuid_demo_str}")
print(f"变量uuid_demo_str的类型:{type(uuid_demo_str)}")
print()
print(f"变量uuid_demo_hex的值:{uuid_demo_hex}")
print(f"变量uuid_demo_hex的类型:{type(uuid_demo_hex)}")
运行输出如下:
变量uuid_demo的值:cab82744-90ee-11ef-a088-3e853c1a3ab7
变量uuid_demo的类型:<class 'uuid.UUID'>
变量uuid_demo_str的值:cab8280c-90ee-11ef-a088-3e853c1a3ab7
变量uuid_demo_str的类型:<class 'str'>
变量uuid_demo_hex的值:cab8274490ee11efa0883e853c1a3ab7
变量uuid_demo_hex的类型:<class 'str'>
uuid1()默认会生成一个带减号(-)的字符串,可以通过hex
数据拿到不带减号的版本,可以根据实际情况使用。
注意:
由于使用MAC地址可能会带来安全性问题,特别是在局域网中,通常可以使用IP地址代替MAC地址。
python中没有基于DCE的算法,所以没有uuid2方法。