UUID即通用唯一标识符,对于所有的UUID它可以保证在空间和时间上的唯一性。它是通过MAC地址、时间戳、命名空间、随机数、伪随机数来保证生成ID的唯一性,有着固定的大小(128 bit)。它的唯一性和一致性特点使得可以无需注册过程就能够产生一个新的UUID。UUID可以被用作多种用途,可以用来短时间内标记一个对象,也可以辨别网络中的持久性对象。
python中uuid模块提供UUID类和函数uuid1()、uuid3()、uuid4()、uuid5()来生成各个版本的UUID。
1. uuid.uuid1([node[, clock_seq]]):基于时间戳
使用主机ID,序列号,和当前时间来生成UUID,可保证全球范围的唯一性。但由于使用该方法生成的UUID中包含有主机的网络地址,因此可能危及隐私,不安全。
该函数有两个参数,如果node参数未指定,系统将会自动调用getnode()函数来获取主机的硬件地址。如果clock_seq参数未指定系统会使用一个随机产生的14位序列号来代替。
2. uuid.uuid3(namespace, name):基于名字的MD5散列值
通过计算命名空间和名字的MD5散列值来生成UUID,可以保证同一命名空间中不同名字的唯一性和不同命名空间的唯一性,但同一命名空间的同一名字生成的UUID相同。
3. uuid.uuid4():基于随机数
通过随机数来生成UUID。使用的是伪随机数有一定的重复概率。
4. uuid.uuid5(namespace, name):基于名字的SHA-1散列值
通过计算命名空间和名字的SHA-1散列值来生成UUID,算法与 uuid.uuid3() 相同。
5. uuid.getnode():以48位正整数形式获取硬件地址
第一次运行时,它可能会启动一个单独的程序
6. uuid模块中支持的四种命名空间,这些命名空间也是uuid对象,根据一定的规则计算得出
uuid.
NAMESPACE_DNS:指定此名称空间后,名称字符串是标准域名。
uuid.
NAMESPACE_URL:指定此名称空间后,名称字符串是URL。
uuid.
NAMESPACE_OID:指定此名称空间后,名称字符串为ISO OID。
uuid.
NAMESPACE_X500:指定此名称空间后,名称字符串是DER或文本输出格式的X.500 DN。
7. uuid.
UUID(
hex=None,bytes=None,bytes_le=None,fields=None,int=None,version=None,*,is_safe=SafeUUID.unknown)
uuid实例对象的属性:
UUID.
bytes:UUID为16字节的字符串。
UUID.
bytes_le:UUID为16字节的字符串。
UUID.
fields:UUID的六个整数字段的元组,也可以作为六个单独的属性和两个派生的属性使用。
UUID.
hex:UUID为32个字符的十六进制字符串。
UUID.
int:UUID为128位整数。
UUID.
version:UUID版本号。
UUID.
is_safe:表示平台是否以多处理安全的方式生成了UUID。
使用
- Python中没有基于DCE的,所以uuid2可以忽略
- uuid4存在概率性重复,由无映射性,最好不用
- 若在Global的分布式计算环境下,最好用uuid1
- 若有名字的唯一性要求,最好用uuid3或uuid5