python是如何生成uuid

UUID(Universally Unique Identifier)是通用唯一识别码,在许多领域用作标识,比如我们常用的数据库也可以用它来作为主键,原理上它是可以对任何东西进行唯一的编码的。

1、uuid1()基于时间戳

    由MAC地址、当前时间戳、随机数字。保证全球范围内的唯一性。但是由于MAC地址使用会带来安全问题,局域网内使用IP代替MAC

  2、uuid2() 基于分布式环境DCE

    算法和uuid1相同,不同的是把时间戳前四位换成POIX的UID,实际很少使用。注意:python中没有这个函数

  3、uuid3() 基于名字和MD5散列值

    通过计算名字和命名空间的MD5散列值得到的,保证了同一命名空间中不同名字的唯一性,不同命名空间的唯一性。但是同一命名空间相同名字生成相同的uuid。

  4、uuid4() 基于随机数

    由伪随机数得到的,有一定重复概率,这个概率是可以算出来的

  5、uuid5() 基于名字和SAHI值

    算法和uuid3相同,不同的是使用SAHI算法

示例

第一种根据当前的时间戳和MAC地址生成的生成的uuid 

import uuid


def get_uuid():
    get_timestamp_uuid = uuid.uuid1()  # 根据 时间戳生成 uuid , 保证全球唯一
    return get_timestamp_uuid
# print(get_uuid())

以上代码定义了一个名为 `get_uuid` 的函数,用于生成唯一的 UUID(Universally Unique Identifier,通用唯一标识符)。

在函数中,使用 `uuid.uuid1()` 函数生成 UUID。`uuid1` 函数生成的 UUID 基于当前的时间戳和主机的 MAC 地址,保证在全球范围内的唯一性。

最后,函数返回生成的 UUID。 

第二种随机数的uuid


import uuid


def get_uuid():
    get_randomnumber_uuid = uuid.uuid4()  # 根据 随机数生成 uuid , 既然是随机就有可能真的遇到相同的,但这就像中奖似的,几率超小,因为是随机而且使用还方便,所以使用这个的还是比较多的。
    return get_randomnumber_uuid
# print(get_uuid())



 以上Python 代码定义了一个名为 `get_uuid()` 的函数,用于生成一个随机的 UUID(通用唯一识别码)。

在函数中,首先使用 `uuid.uuid4()` 方法生成一个随机的 UUID,该方法基于随机数生成 UUID,因此在理论上有可能生成相同的 UUID,但概率非常小。

然后将生成的 UUID 返回,即为该函数的输出结果。

如果需要使用该函数生成 UUID,可以通过调用 `get_uuid()` 函数来获取一个随机的 UUID。

 第三种基于名字和MD5散列值生成的uuid

import uuid


def get_uuid(namespace,name):
    get_specifiedstr_uuid = uuid.uuid3(namespace,name)  # 里面的namespace和具体的字符串都是我们指定的
    return get_specifiedstr_uuid
# print(get_uuid())




以上代码定义了一个函数 `get_uuid`,用于生成指定命名空间和名称的 UUID。具体来说,这里使用了 Python 内置的 `uuid` 模块,调用其中的 `uuid3` 方法生成 UUID。

该函数接受两个参数,第一个参数是指定的命名空间,可以是一个 UUID 对象或字符串;第二个参数是具体的名称,也可以是一个字符串。在函数内部,使用 `uuid3` 方法将命名空间和名称作为参数生成 UUID,并返回生成的 UUID 对象。最后,通过调用该函数,就可以在程序中生成指定的 UUID 了。

第四种基于名字和SAHI值生成的uuid

import uuid


def get_uuid(namespace,name):
    get_specifiedstr_SHA1_uuid = uuid.uuid5(namespace,name)  # 和uuid3()貌似并没有什么不同,写法一样,也是由用户来指定namespace和字符串,不过这里用的散列并不是MD5,而是SHA1.
    return get_specifiedstr_SHA1_uuid
# print(get_uuid())



以上Python 代码片段,用于生成 UUID(通用唯一标识符)。

UUID 是一种可以确保不同计算机上的程序生成的 ID 唯一的标识符。它们通常用于分布式系统中,以确保不同的计算机节点生成的数据唯一性。

该代码使用 Python 标准库中的 uuid 模块生成 UUID。其中,uuid.uuid5() 方法用于根据给定的命名空间和名称生成 UUID,它使用 SHA1 散列算法来生成 UUID。

该代码定义了一个函数 get_uuid(),该函数接收两个参数 namespace 和 name,用于指定命名空间和名称。然后,该函数调用 uuid.uuid5() 方法生成 UUID,并返回生成的 UUID。 

#UUID中间的'-'是个比较奇怪的字符,我们处理也很简单,但是这个根据需求来需不需要处理'-'

import uuid

uid = str(uuid.uuid4())
suid = ''.join(uid.split('-'))

以上Python 代码主要用于生成一个唯一标识符(UUID),并将其转换为字符串格式并去掉其中的“-”符号。具体的解析如下:

1. 导入 uuid 模块,该模块用于生成 UUID;
2. 调用 uuid.uuid4() 方法生成一个 UUID 对象,该对象是一个 128 位的唯一标识符;
3. 将 UUID 对象转换为字符串格式,使用 str() 函数;
4. 使用 split('-') 方法将字符串按照“-”符号进行分割,得到一个列表;
5. 使用 join() 方法将列表中的字符串元素合并为一个字符串,中间没有连接符号。

最终得到的字符串就是一个去掉“-”符号的 UUID,可以用于生成唯一的标识符,例如用于数据库中的主键。

import uuid

def get_uuid():
    get_timestamp_uuid = uuid.uuid1()  # 根据 时间戳生成 uuid , 保证全球唯一
    return get_timestamp_uuid
# print(get_uuid())



def get_uuid4():
    get_randomnumber_uuid = uuid.uuid4()  # 根据 随机数生成 uuid , 既然是随机就有可能真的遇到相同的,但这就像中奖似的,几率超小,因为是随机而且使用还方便,所以使用这个的还是比较多的。
    return get_randomnumber_uuid
# print(get_uuid())



def get_uuid3(namespace,name):
    get_specifiedstr_uuid = uuid.uuid3(namespace,name)  # 里面的namespace和具体的字符串都是我们指定的
    return get_specifiedstr_uuid
# print(get_uuid())


def get_uuid5(namespace,name):
    get_specifiedstr_SHA1_uuid = uuid.uuid5(namespace,name)  # 和uuid3()貌似并没有什么不同,写法一样,也是由用户来指定namespace和字符串,不过这里用的散列并不是MD5,而是SHA1.
    return get_specifiedstr_SHA1_uuid
# print(get_uuid())

对以上代码进行封装和优化,可以将四个函数封装为一个类,方便调用,代码如下所示:

import uuid

class UUIDGenerator:
    
    def __init__(self):
        pass
    
    @staticmethod
    def get_timestamp_uuid():
        """根据时间戳生成 UUID,保证全球唯一"""
        return uuid.uuid1()
    
    @staticmethod
    def get_randomnumber_uuid():
        """根据随机数生成 UUID,几率超小,但使用方便"""
        return uuid.uuid4()
    
    @staticmethod
    def get_specifiedstr_uuid(namespace, name):
        """根据指定字符串生成 UUID"""
        return uuid.uuid3(namespace, name)
    
    @staticmethod
    def get_specifiedstr_SHA1_uuid(namespace, name):
        """根据指定字符串生成 UUID,使用 SHA1 散列"""
        return uuid.uuid5(namespace, name)

这样只需要实例化这个类,就可以调用其中的四个方法生成不同类型的 UUID。例如:

uuid_generator = UUIDGenerator()
print(uuid_generator.get_timestamp_uuid())
print(uuid_generator.get_randomnumber_uuid())
print(uuid_generator.get_specifiedstr_uuid(uuid.NAMESPACE_DNS, 'example.com'))
print(uuid_generator.get_specifiedstr_SHA1_uuid(uuid.NAMESPACE_DNS, 'example.com'))

 这样可以使代码更加简洁易读,也更方便重复使用。

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SzetoZeZe

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值