python生成并处理uuid的方法

本文介绍了如何使用Python的uuid模块生成四种类型的UUID:基于时间戳和MAC地址的uuid1、基于MD5散列的uuid3、基于随机数的uuid4以及基于SHA1散列的uuid5,并展示了如何去除UUID中的'-'符号。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

python生成并处理uuid的方法

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.youkuaiyun.com/yl416306434/article/details/80569688

        UUID(Universally Unique Identifier)是通用唯一识别码,在许多领域用作标识,比如我们常用的数据库也可以用它来作为主键,原理上它是可以对任何东西进行唯一的编码的。作为新手一看到类似varchar(40)这样的主键就觉得有点蒙圈了,字符串型也不能自增啊,这里就应该应用UUID了。数据库一般都有自己的办法生成UUID,但虽然可以用,但这玩意考虑到可读性和有点坑的长度还是尽量不要用这玩意做主键···咳,有点跑题···

        下面就简单说明一下python是如何生成UUID的:

        python有一个模块叫做uuid,导入它就可以使用它的四个方法了。注意这四个方法依次是uuid1(),uuid3(),uuid4(),uuid5(),

然而并没有uuid2()。

  1. # -*- coding:utf-8 -*-

  2. import uuid

  3.  
  4. print uuid.uuid1()

  5. #bf1dfacf-67d8-11e8-9a23-408d5c985711

  6. print uuid.uuid3(uuid.NAMESPACE_DNS, 'yuanlin')

  7. #ddb366f5-d4bc-3a20-ac68-e13c0560058f

  8. print uuid.uuid4()

  9. #144d622b-e83a-40ea-8ca1-66af8a86261c

  10. print uuid.uuid5(uuid.NAMESPACE_DNS, 'yuanlin')

  11. #4a47c18d-037a-5df6-9e12-20b643c334d3

        乍一看全都是36个字符,那么他们到底有什么不同呢,下面一一分析。

        uuid1():这个是根据当前的时间戳和MAC地址生成的,最后的12个字符408d5c985711对应的就是MAC地址,因为是MAC地址,那么唯一性应该不用说了。但是生成后暴露了MAC地址这就很不好了。

        uuid3():里面的namespace和具体的字符串都是我们指定的,然后呢···应该是通过MD5生成的,这个我们也很少用到,莫名其妙的感觉。

        uuid4():这是基于随机数的uuid,既然是随机就有可能真的遇到相同的,但这就像中奖似的,几率超小,因为是随机而且使用还方便,所以使用这个的还是比较多的。

        uuid5():这个看起来和uuid3()貌似并没有什么不同,写法一样,也是由用户来指定namespace和字符串,不过这里用的散列并不是MD5,而是SHA1.

        下面再来说一下简单的处理,UUID中间的'-'是个比较奇怪的字符,那么应该去掉它,这其实超简单:

  1. uid = str(uuid.uuid4())

  2. suid = ''.join(uid.split('-'))

         

<think>我们使用Python内置的uuid模块来生成UUIDUUID是通用唯一识别码(Universally Unique Identifier)的缩写。 生成UUID后,我们可以使用str()函数将其转换为字符串。 下面是一个简单的示例代码:</think>在Python生成UUID(通用唯一识别码)转换为字符串非常简单,可以使用内置的`uuid`模块。以下是详细解决方案: ### 解决方案代码 ```python import uuid # 生成一个随机的UUID(版本4) generated_uuid = uuid.uuid4() #UUID对象转为字符串 uuid_str = str(generated_uuid) # 验证结果 print("生成UUID对象:", generated_uuid) print("字符串形式的UUID:", uuid_str) print("类型验证 - UUID对象类型:", type(generated_uuid)) print("类型验证 - 字符串类型:", type(uuid_str)) ``` ### 代码解释: 1. **导入模块**:`import uuid` 导入Python内置的UUID模块 2. **生成UUID**: - `uuid.uuid4()` 生成一个随机的**版本4 UUID**(基于随机数) - 其他常用生成方法- `uuid.uuid1()`:基于主机MAC地址和时间戳(可能泄露隐私) - `uuid.uuid3()` / `uuid.uuid5()`:基于命名空间和名称的哈希 3. **转为字符串**: - 直接使用`str()`转换是最简洁安全的方法 - 等价于调用UUID对象的`.hex`属性(但`str()`包含连字符) 4. **输出验证**: - 打印原始UUID对象和字符串形式 - 使用`type()`验证转换前后的数据类型 ### 输出示例: ``` 生成UUID对象: a3e45678-12b3-4c5d-9e8f-0123456789ab 字符串形式的UUID: a3e45678-12b3-4c5d-9e8f-0123456789ab 类型验证 - UUID对象类型: <class &#39;uuid.UUID&#39;> 类型验证 - 字符串类型: <class &#39;str&#39;> ``` ### 关键特性: 1. **唯一性**:在理论上有极低的重复概率(约10^38分之一的碰撞概率) 2. **标准化格式**:32个十六进制字符+4个连字符(8-4-4-4-12结构) 3. **无状态生成**:不需要中央注册即可分布式生成 ### 使用场景: - 数据库主键替代自增ID - 分布式系统唯一标识 - 文件/资源命名 - 会话ID生成
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值