一. 简介

  UUID是128位的全局唯一标识符,通常由32字节的字母串表示。它可以保证时间和空间的唯一性,也称为GUID。

全称为:UUID--Universally Unique IDentifier  在python 中叫做UUID,在C#中称为 GUID--Globally Unique IDentifier.

它通过MAC地址,时间戳,命名空间,随机数,伪随机数来保证生成ID的唯一性。

  UUID主要有五个算法,也就是五种方法来实现。

(1). uuid1()---基于时间戳

  由MAC地址,当前时间戳,随机数字生成。可以保证全球范围内的唯一性。但是由于MAC地址的使用同时带来了安全问题,

局域网中可以使用IP来代替MAC。

(2). uuid2()---基于分布式计算环境DCE(python中没有这个函数)

  算法和uuid1相同,不同的是把时间戳的前4位换位POSIX的UID,实际中很少用到该方法。

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

  通过计算名字和命名空间的MD5散列值得到,保证了同一命名空间中不同名字的唯一性,和不同命名空间的唯一性,

但同一命名空间的名字生成相同的uuid。

(4). uuid4()---基于随机数

  由伪随机数得到,有一定的重复概率,该概率可以计算出来。

(5). uuid5()---基于名字的SHA-1散列值

  算法和uuid3()相同,不同的是使用Secure Hash Algorithm 1 算法。

使用经验:

  1. Python中没有基于DCE的,所以uuid2可以忽略
  2. uuid4存在概率性重复,由无映射性,最好不用
  3. 如果在global的分布式计算环境下,最好用uuid1
  4. 若有名字的唯一性要求,最好使用uuid3或uuid5

二. 使用

import uuid

# uuid1()
>>> print(uuid.uuid1())
2cf0fa7e-48d9-11e6-93fb-c03fd53413ef
# uuid3()
>>> print(uuid.uuid3(uuid.NAMESPACE_DNS, 'test'))
45a113ac-c7f2-30b0-90a5-a399ab912716
# uuid4()
>>> print(uuid.uuid4())
08bffbb6-05e1-41c1-8989-6aa07a4a5e5d
# uuid5()
>>> print(uuid.uuid5(uuid.NAMESPACE_DNS, 'test'))
4be0643f-1d98-573b-97cd-ca98a65347dd

  

Python3之uuid模块的更多相关文章

  1. python基础系列教程——Python3.x标准模块库目录

    python基础系列教程——Python3.x标准模块库目录 文本 string:通用字符串操作 re:正则表达式操作 difflib:差异计算工具 textwrap:文本填充 unicodedata ...

  2. 每天一个小程序—第0001题(uuid模块)

    第 0001 题:  做为 Apple Store App 独立开发者,你要搞限时促销,为你的应用生成激活码(或者优惠券),使用 Python 如何生成 200 个激活码(或者优惠券)? 一开始以为是 ...

  3. Python内置模块之time、random、hashlib、OS、sys、UUID模块

    Python常用模块 1.time模块 在Python中,通常有这三种方式来表示时间:时间戳.元组(struct_time).格式化的时间字符串: (1)时间戳(timestamp) :通常来说,时间 ...

  4. Python标准库 -- UUID模块(生成唯一标识)

    UUID是什么: UUID: 通用唯一标识符 ( Universally Unique Identifier ),对于所有的UUID它可以保证在空间和时间上的唯一性,也称为GUID,全称为: UUID ...

  5. Python3之turtle模块的使用

    Python3之turtle模块的使用     直接扣代码就行: import turtle as t t.pensize(4) t.hideturtle() t.colormode(255) t.c ...

  6. Python3:Requests模块的异常值处理

    Python3:Requests模块的异常值处理 用Python的requests模块进行爬虫时,一个简单高效的模块就是requests模块,利用get()或者post()函数,发送请求. 但是在真正 ...

  7. Python3中正则模块re.compile、re.match及re.search函数用法详解

    Python3中正则模块re.compile.re.match及re.search函数用法 re模块 re.compile.re.match. re.search 正则匹配的时候,第一个字符是 r,表 ...

  8. Python3安装Celery模块后执行Celery命令报错

    1 Python3安装Celery模块后执行Celery命令报错 pip3 install celery # 安装正常,但是执行celery 命令的时候提示没有_ssl模块什么的 手动在Python解 ...

  9. Python3之configparser模块

    1. 简介 configparser用于配置文件解析,可以解析特定格式的配置文件,多数此类配置文件名格式为XXX.ini,例如mysql的配置文件.在python3.X中 模块名为configpars ...

随机推荐

  1. 预编译头文件来自编译器的早期版本,或者预编译头为 C++ 而在 C 中使用它(或相反)转

    vs2010的mfc项目中编译c语言出现错误: "...预编译头文件来自编译器的早期版本,或者预编译头为 C++ 而在 C 中使用它(或相反)" 解决方法: 建工程时 建立空项目  ...

  2. python的ftplib模块

    Python中的ftplib模块 Python中默认安装的ftplib模块定义了FTP类,其中函数有限,可用来实现简单的ftp客户端,用于上传或下载文件 FTP的工作流程及基本操作可参考协议RFC95 ...

  3. 安卓 textview 换行 不满就换了

    public static String ToDBC(String input) { char[] c = input.toCharArray(); for (int i = 0; i < c. ...

  4. ./configure 交叉编译库时所最常用到的配置

    ./configure 交叉编译,一般流程 ./configure xxx make make instal 结合我自己的编译工具,一般我的编译选项如下 ./configure --prefix=in ...

  5. Part10-C语言环境初始化-Bss段初始化lesson2

    1.BSS段的作用 初始化的全局变量存放在数据段: 局部变量存放在栈中: malloc的存放在堆: 未初始化的全局变量存放在BSS段: 找到bss段的起始与结束地址,往里面添加0,便初始化好了. 打开 ...

  6. SpringMVC——视图和视图解析器

    请求处理方法执行完成后,最终返回一个 ModelAndView对象.对于那些返回 String,View 或 ModeMap 等类型的处理方法,Spring MVC 也会在内部将它们装配成一个Mode ...

  7. C#使用var定义变量时的四个特点

    使用var定义变量时有以下四个特点: 1. 必须在定义时初始化.也就是必须是var s = “abcd”形式: 2. 一但初始化完成,就不能再给变量赋与初始化值类型不同的值了. 3.   var要求是 ...

  8. App测试从入门到精通之更新测试

    我们都知道,app在使用一段时间,都会有更新,而且更新会不止一次.在实际测试中,关于更新的测试场景也是我们需要重点关注的,接下来我们就看一下关于App的更新测试有哪些测试点我们需要注意: APP更新测 ...

  9. What’s the Difference Between a Value Provider and Model Binder?

    ASP.NET MVC 3 introduced the ability to bind an incoming JSON request to an action method parameter, ...

  10. Schwartz kernel theorem施瓦兹核定理

    In mathematics, the Schwartz kernel theorem is a foundational result in the theory of generalized fu ...