Python uuid模块生成通用唯一标识符详解与实战

陈默
陈默
发布时间:2026-10-14 | 1人浏览过
原创

本文详细介绍Python中uuid模块的用法,涵盖基于时间戳、MD5散列、随机数和SHA-1散列的四种UUID生成方式。通过具体代码示例解析uuid1、uuid3、uuid4和uuid5函数的参数与特性,帮助开发者在数据库设计和前端开发中高效生成唯一标识符。

背景知识

背景知识

UUID(通用唯一标识符)旨在确保在空间和时间维度上的绝对唯一性。其生成机制融合了MAC地址、时间戳、命名空间、随机数及伪随机数等要素,固定占用128位存储空间。凭借这种唯一性与一致性,UUID无需经过注册流程即可创建,既适用于短期对象标记,也能可靠地用于网络中持久性对象的识别。

为何需要UUID?

为何需要UUID?

在许多应用场景中,系统需要一个ID来标识对象,但该ID无需具备具体业务含义。典型的例子包括数据库表中的id字段,以及前端UI库中动态创建的UI元素。后者因需频繁生成各类界面组件,必须依赖唯一的ID进行区分,此时UUID便成为理想选择。

Python的uuid模块

Python的uuid模块

Python内置的uuid模块提供了UUID类以及uuid1()、uuid3()、uuid4()、uuid5()四个函数,分别对应生成版本1、3、4、5的UUID(注:Python标准库中未提供uuid2()函数)。以下是对该模块中最常用函数的总结:

1. uuid.uuid1([node[, clock_seq]]):基于时间戳

该函数利用主机ID、序列号及当前时间生成UUID,确保全球范围内的唯一性。然而,由于生成的UUID中包含了主机的网络地址,可能引发隐私泄露风险。此函数接受两个参数:若未指定node参数,系统会自动调用getnode()获取主机硬件地址;若未指定clock_seq参数,系统将生成一个14位的随机序列号作为替代。

2. uuid.uuid3(namespace, name):基于名字的MD5散列值

通过计算命名空间与名称的MD5散列值来生成UUID。该方法确保了同一命名空间下不同名称的唯一性,以及不同命名空间之间的唯一性。需要注意的是,若命名空间和名称完全相同,生成的UUID也将相同。

4. uuid.uuid4():基于随机数

该函数通过随机数生成UUID。由于使用的是伪随机数生成算法,理论上存在极小的重复概率。

5. uuid.uuid5(namespace, name):基于名字的SHA-1散列值

通过计算命名空间与名称的SHA-1散列值来生成UUID,其算法逻辑与uuid.uuid3()一致。

3. uuid模块的典型使用方法

典型使用方法


>>> import uuid

>>> # make a UUID based on the host ID and current time
>>> uuid.uuid1()
UUID('a8098c1a-f86e-11da-bd1a-00112444be1e')

>>> # make a UUID using an MD5 hash of a namespace UUID and a name
>>> uuid.uuid3(uuid.NAMESPACE_DNS, 'python.org')
UUID('6fa459ea-ee8a-3ca4-894e-db77e160355e')

>>> # make a random UUID
>>> uuid.uuid4()
UUID('16fd2706-8baf-433b-82eb-8c7fada847da')

>>> # make a UUID using a SHA-1 hash of a namespace UUID and a name
>>> uuid.uuid5(uuid.NAMESPACE_DNS, 'python.org')
UUID('886313e1-3b8a-5372-9b90-0c9aee199e5d')

>>> # make a UUID from a string of hex digits (braces and hyphens ignored)
>>> x = uuid.UUID('{00010203-0405-0607-0809-0a0b0c0d0e0f}')

>>> # convert a UUID to a string of hex digits in standard form
>>> str(x)
'00010203-0405-0607-0809-0a0b0c0d0e0f'

>>> # get the raw 16 bytes of the UUID
>>> x.bytes
'\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f'

>>> # make a UUID from a 16-byte string
>>> uuid.UUID(bytes=x.bytes)
UUID('00010203-0405-0607-0809-0a0b0c0d0e0f')

以上即为本文的全部内容,希望对各位的学习有所帮助,也欢迎大家继续支持本站。

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表