一、背景介绍
UUID(Universally Unique Identifier)
是通用唯一识别码。
对于所有的 UUID
它可以保证在空间和时间上的唯一性,它使通过 MAC
地址、时间戳、命名空间、随机数、伪随机数等参数来保证生成 ID
的唯一性。
拥有着固定的大小(128bit
)。
它的唯一性和一致性特点使得可以无需注册过程就能够产生一个新的 UUID
。
UUID
可以被用作多种用途,既可以用来短时间内标记一个对象,也可以可靠的辨别网络中的持久性对象。
二、uuid模块介绍
Python
中的 uuid
包提供 uuid1()
、uuid3()
、uuid4()
、uuid5()
来生成各个版本的 uuid
。
注意:没有 uuid2()
函数。
1.uuid.uuid1 基于时间戳
使用主机 ID、序列号和当前时间戳来生成 UUID,可保证唯一性。
涉及主机网络地址,可能危及隐私。
使用语法:
uuid.uuid1([node [, clock_seq]])
-- node 未指定时自动调用getnode()获取主机硬件地址
-- clock_seq 参数未指定系统会使用一个随机产生的14位序列号来代替
2.uuid.uuid3 基于名字的MD5散列值
通过计算命名空间和名字的MD5哈希值来生成 UUID, 可以保证唯一性。
使用语法:
uuid.uuid3(namespace, name)
3.uuid.uuid4 基于随机数
通过随机数来生成 UUID, 使用的是伪随机数,有一定的重复概率。
uuid.uuid4() # 不带任何参数
4.uuid.uuid5 基于名字的SHA-1散列值
通过计算命名空间和名字的 SHA-1 哈希值来生成 UUID, 算法与 uuid.uuid3()
相同。
uuid.uuid5(namespace, name)
三、实操
输出结果均为36个字符。
import uuid
uuid.uuid1() # UUID('29cfec4a-5909-11ec-bc6d-005056c00008')
uuid.uuid3(uuid.NAMESPACE_DNS, 'python.org') # UUID('6fa459ea-ee8a-3ca4-894e-db77e160355e')
uuid.uuid4() # UUID('cd5187a2-6dd6-49a8-8934-1a3911a3d2f0')
uuid.uuid5(uuid.NAMESPACE_DNS, 'python.org') # UUID('886313e1-3b8a-5372-9b90-0c9aee199e5d')
x = uuid.UUID('{00010203-0405-0607-0809-0a0b0c0d0e0f}')
str(x) # '00010203-0405-0607-0809-0a0b0c0d0e0f'
x.bytes # b'\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f'
uuid.UUID(bytes=x.bytes) # UUID('00010203-0405-0607-0809-0a0b0c0d0e0f')
UUID
中间的 ”-“ 可利用以下脚本替换:
xx = str(uuid.uuid4()) # '8881d110-9788-4221-84ff-0a5e62224250'
# 方法一
xx.replace('-','') # '8881d1109788422184ff0a5e62224250'
# 方法二
''.join(xx.split('-')) # '8881d1109788422184ff0a5e62224250'
# 方法三
uuid.UUID('{8881d110-9788-4221-84ff-0a5e62224250}').hex # '8881d1109788422184ff0a5e62224250'
参考链接:python uuid 介绍
参考链接:python生成并处理uuid的方法