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'))
这样可以使代码更加简洁易读,也更方便重复使用。