有时我们在百度贴吧,在一个网站,保存网页上的一些图片时,图片名有时会是一串很长的数字和字母组成的,但无一例外,图像之间不会出现重名。这个唯一的 id,一般通过 uuid 的方式获得,uuid 根据的是从 1970年1月1日到现在经历的秒数。

1. 基础

UUID 是 128 位的全局唯一标识符,通常由 32 字节的字符串(十六进制)表示。

它可以保证时间和空间的唯一性,也称为GUID,全称为:

  • UUID —— Universally Unique IDentifier Python 中叫 UUID
  • GUID —— Globally Unique IDentifier C# 中叫 GUID

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

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

  • 1、uuid1()——基于时间戳

    由 MAC 地址(主机物理地址)、当前时间戳、随机数生成。可以保证全球范围内的唯一性,

    但 MAC 的使用同时带来安全性问题,局域网中可以使用 IP 来代替MAC。

    注意 uuid1() 返回的不是普通的字符串,而是一个 uuid 对象,其内含有丰富的成员函数和变量。

  • 2、uuid2()——基于分布式计算环境DCE(Python中没有这个函数)

    算法与uuid1相同,不同的是把时间戳的前 4 位置换为 POSIX 的 UID。

    实际中很少用到该方法。

  • 3、uuid3()——基于名字的MD5散列值

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

    和不同命名空间的唯一性,但同一命名空间的同一名字生成相同的uuid。

  • 4、uuid4()——基于随机数

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

  • 5、uuid5()——基于名字的SHA-1散列值

    算法与uuid3相同,不同的是使用 Secure Hash Algorithm 1 算法

2. 实战

使用方面:

首先,Python中没有基于 DCE 的,所以uuid2可以忽略;

其次,uuid4存在概率性重复,由无映射性,最好不用;

再次,若在Global的分布式计算环境下,最好用uuid1;

最后,若有名字的唯一性要求,最好用uuid3或uuid5。

  1. import uuid
  2. name = "test_name"
  3. namespace = "test_namespace"
  4. print uuid.uuid1() # 带参的方法参见Python Doc
  5. print uuid.uuid3(namespace, name)
  6. print uuid.uuid4()
  7. print uuid.uuid5(namespace, name)

Python 标准库 —— uuid(生成唯一 ID)的更多相关文章

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

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

  2. 【Python】 uuid生成唯一ID

    uuid uuid是128位的全局唯一标识符(univeral unique identifier),通常用32位的一个字符串的形式来表现.有时也称guid(global unique identif ...

  3. Python标准库--UUID

    UUID(Universally Unique Identifier)是128位通用唯一识别码,通常由32字节的字符串表示.它可以保证时间和空间的唯一性,也称为GUID,全称为:UUID —— Uni ...

  4. python使用uuid生成唯一id或str

    介绍: UUID是128位的全局唯一标识符,通常由32字节的字符串表示. 使用: import uuid print uuid.uuid1() 14bfe806-f1c7-11e6-83b5-0680 ...

  5. python学习之-- 生成唯一ID

    以下以2种方法生成唯一ID def uuid_method(): """第一种方法""" import uuid return str(uu ...

  6. python第六天 函数 python标准库实例大全

    今天学习第一模块的最后一课课程--函数: python的第一个函数: 1 def func1(): 2 print('第一个函数') 3 return 0 4 func1() 1 同时返回多种类型时, ...

  7. 转--Python标准库之一句话概括

    作者原文链接 想掌握Python标准库,读它的官方文档很重要.本文并非此文档的复制版,而是对每一个库的一句话概括以及它的主要函数,由此用什么库心里就会有数了. 文本处理 string: 提供了字符集: ...

  8. [python标准库]XML模块

    1.什么是XML XML是可扩展标记语言(Extensible Markup Language)的缩写,其中的 标记(markup)是关键部分.您可以创建内容,然后使用限定标记标记它,从而使每个单词. ...

  9. Python 标准库一览(Python进阶学习)

    转自:http://blog.csdn.net/jurbo/article/details/52334345 写这个的起因是,还是因为在做Python challenge的时候,有的时候想解决问题,连 ...

随机推荐

  1. Flask项目之手机端租房网站的实战开发(二)

    说明:该篇博客是博主一字一码编写的,实属不易,请尊重原创,谢谢大家! 接着上一篇博客继续往下写 :https://blog.csdn.net/qq_41782425/article/details/8 ...

  2. Java基础学习总结(51)——JAVA分层理解

    service是业务层  action层即作为控制器 DAO (Data Access Object) 数据访问   1.JAVA中Action层, Service层 ,modle层 和 Dao层的功 ...

  3. 面向对象的CSS

    原文 简书原文:https://www.jianshu.com/p/cb5e9f56ddcc 大纲 1.面向对象的CSS(OOCSS)概念 2.面向对象的CSS的作用 3.面向对象的CSS的注意事项 ...

  4. 8.2 Android灯光系统_led_class驱动

    android-5.0.2\hardware\libhardware\include\hardware\lights.h  //系统一些宏定义 android源码只带的灯光驱动在linux内核的dri ...

  5. java并发之生产者消费者模型

    生产者和消费者模型是操作系统中经典的同步问题.该问题最早由Dijkstra提出,用以演示它提出的信号量机制. 经典的生产者和消费者模型的描写叙述是:有一群生产者进程在生产产品.并将这些产品提供给消费者 ...

  6. stm32四种输入

    1.          上拉输入(GPIO_Mode_IPU)   上拉输入就是信号进入芯片后加了一个上拉电阻,再经过施密特触发器转换成0.1信号,读取此时的引脚电平为高电平:   2.       ...

  7. 20、在PC上测试虚拟驱动vivi

    在Ubuntu上测试 准备工作:安装xawtv(是一个应用程序,用来在Ubuntu上捕获摄像头数据并显示)sudo apt-get install xawtv 源码xawtv-3.95.tar.gz: ...

  8. iOS将汉字转换为拼音

    将汉字转换为拼音 - (NSString *)chineseToPinyin:(NSString *)chinese withSpace:(BOOL)withSpace { CFStringRef h ...

  9. 互联网支付的"二清"介绍

    所谓"二清"公司,是针对"一清"机构而言. 的"一清"和"二清"一般属于POS收单业务范畴,"一清" ...

  10. Linux系统编程——线程私有数据

    在多线程程序中.常常要用全局变量来实现多个函数间的数据共享.因为数据空间是共享的,因此全局变量也为全部线程共同拥有. 測试代码例如以下: #include <stdio.h> #inclu ...