python 生成随机唯一字符串

python 生成随机唯一字符串:可以考虑使用uuid

(我的需求:现在要生成一个32位唯一随机字符串为二进制的值)

1、uuid是什么

UUID的全称是Universally Unique Identifier,中文为通用唯一识别码。本身是由一组32位数的16进制数字所构成,故UUID理论上的总数为1632=2128,约等于3.4 x 1038。也就是说若每纳秒产生1兆个UUID,要花100亿年才会将所有UUID使用完,也就是说最多100亿年的时间,UUID将必定出现重复,不过100亿年地球是否存在也似乎不确定,暂时不必考虑那么长远。

UUID的表现形式
UUID也是需要像身份证号一样事先制定一些简单的规则进去的,它的标准型式包含32个16进制数字,以连字号分为五段,表现形式为8-4-4-4-12的32个字符,如下所示:

  xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx

例如:89b30bc0-4162-11ee-a47f-985f4f03c74c

其中M与N都有特殊含义,M表示UUID版本,目前只有五个版本,即只会出现1,2,3,4,5,数字 N的一至三个最高有效位表示 UUID 变体,目前只会出现8,9,a,b四种情况。

2、uuid的版本

平时常用到的是uuid1和uuid4

2.1、uuid.uuid1

uuid.uuid1(node=None, clock_seq=None)
根据主机 ID、序列号和当前时间生成一个 UUID。 如果没有给出 node,则使用 getnode() 来获取硬件地址。 如果给出了 clock_seq,它将被用作序列号;否则将选择一个随机的 14 比特位序列号。

2.2、uuid.uuid2(Python中没有这个函数)

uuid.uuid2()——基于分布式计算环境DCE
算法与uuid1相同,不同的是把时间戳的前4位置换为POSIX的UID。
实际中很少用到该方法。

2.3、uuid.uuid3

uuid.uuid3(namespace, name)
根据命名空间标识符(这是一个UUID)和名称(这是一个字符串)的MD5哈希值,生成一个UUID。

2.4、uuid.uuid4

uuid.uuid4()
生成一个随机的UUID。

2.5、uuid.uuid5

uuid.uuid5(namespace, name)
根据命名空间标识符(这是一个UUID)和名称(这是一个字符串)的SHA-1哈希值生成一个UUID。

3、uuid使用(实现需求,操作代码)

需求:32位唯一随机字符串为二进制的值
例如:akeljemalkde085ae2e13a2e2e1a3e2a

# 引入uuid库
import uuid 

# 使用uuid1生成uuid
a = uuid.uuid1()
print(a, type(a))
# 49e6fadb-4247-11ee-a93b-985f4f03c74c <class 'uuid.UUID'>

# 转换为字符串类型
b = str(a)
print(b, type(b))
# 49e6fadb-4247-11ee-a93b-985f4f03c74c <class 'str'>

# 将连接符“-”去掉
c = b.replace("-","")
print(c, type(c))
# 49e6fadb424711eea93b985f4f03c74c <class 'str'>

# 将字符串转为二进制
d = c.encode(encoding="utf-8")
print(d,type(d))
# b'49e6fadb424711eea93b985f4f03c74c' <class 'bytes'>

还可以一句话解决:

import uuid 

uu_id = str(uuid.uuid1()).replace("-","").encode(encoding="utf-8")
print(uu_id, type(uu_id))
# b'49e6fadb424711eea93b985f4f03c74c' <class 'bytes'>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值