- uuid模块:
通用唯一标识符(Universally Unique Identifie),UUID可以保证在空间和时间上的唯一性. 它是通过MAC地址, 时间戳, 命名空间, 随机数, 伪随机数来保证生成ID的唯一性, 有着固定的大小( 128 bit ). 它的唯一性和一致性特点使得可以无需注册过程就能够产生一个新的UUID. UUID可以被用作多种用途, 既可以用来短时间内标记一个对象, 也可以可靠的辨别网络中的持久性对象. - python中的uuid模块提供四种算法分别是uuid1.(), uuid3.(),uuid4.(),uuid5.()。
uuid1.()是基于时间戳产生的uuid;
uuid3.(namespace, str)是通过md5散列值产生的uuid,如果名字相同产生的uuid号也相同。md5散列值,也可以成为一种加密算法。
uuid4.()是通过伪随机数产生的,有一定的几率产生相同的uuid,概率可算。
uuid5.(namespace, str)是基于sha1散列值产生的uuid。跟uuid3一样,sha1散列值也是一种加密算法。
uuid3和5中的namesspace有一些由预定义UUID值标识的公开的命名空间,分别用于处理DNS、URL、ISO OID和X.500识别名(Distinguished Name)。通过生成和保存UUID值,还可以定义新的特定于应用的命名空间。 - 示例:
[root@localhost ]# python
Python 3.7.9 (default, Sep 8 2020, 16:48:29)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-39)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import uuid
>>> uuid.uuid1()
UUID('ba14004c-0e94-11eb-ba17-000c29aa80c9')
>>>
>>> uuid.uuid1()
UUID('bb7dbe1e-0e94-11eb-ba17-000c29aa80c9')
>>> uuid.uuid3(uuid.) //注释:在uuid.后双击table就会出现一些namespace
uuid.Enum( uuid.RESERVED_NCS uuid.os
uuid.NAMESPACE_DNS uuid.RFC_4122 uuid.sys
uuid.NAMESPACE_OID uuid.SafeUUID( uuid.uuid1(
uuid.NAMESPACE_URL uuid.UUID( uuid.uuid3(
uuid.NAMESPACE_X500 uuid.bytes_( uuid.uuid4(
uuid.RESERVED_FUTURE uuid.getnode( uuid.uuid5(
uuid.RESERVED_MICROSOFT uuid.int_(
>>> uuid.uuid3(uuid.NAMESPACE_DNS, "a")
UUID('4c104dd0-4821-30d5-9ce3-0e7a1f8b7c0d')
>>> uuid.uuid3(uuid.NAMESPACE_DNS, "a")
UUID('4c104dd0-4821-30d5-9ce3-0e7a1f8b7c0d')
>>> uuid.uuid3(uuid.NAMESPACE_DNS, "b")
UUID('c4f8d206-80ca-33ae-a830-f58835b1b131')
>>> uuid.uuid5(uuid.NAMESPACE_DNS, "b")
UUID('3f10dbe8-4cbd-5e31-9b1f-af0cb9dda9cf')
>>> uuid.uuid5(uuid.NAMESPACE_DNS, "a")
UUID('4f3f2898-69e3-5a0d-820a-c4e87987dbce')
>>> uuid.uuid4()
UUID('24ee8bc0-a094-42c1-966b-54e2a000154a')
>>> uuid.uuid4()
UUID('fb0b82e2-31d7-4e67-8e83-66a78766d824')
>>>
动手测试一下,可以体验体验uuid产生的过程,理解更深刻。