python 中uuid1,uuid3,uuid4与uuid5的区别

  • Post author:
  • Post category:python


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

python有一个模块叫做uuid,导入它就可以使用它的四个方法了。注意这四个方法依次是uuid1(),uuid3(),uuid4(),uuid5(),然而并没有uuid2()。

# -*- coding:utf-8 -*-
import uuid
 
print uuid.uuid1()
#bf1dfacf-67d8-11e8-9a23-408d5c985711

print uuid.uuid3(uuid.NAMESPACE_DNS, 'yuanlin')
#ddb366f5-d4bc-3a20-ac68-e13c0560058f

print uuid.uuid4()
#144d622b-e83a-40ea-8ca1-66af8a86261c

print uuid.uuid5(uuid.NAMESPACE_DNS, 'yuanlin')
#4a47c18d-037a-5df6-9e12-20b643c334d3

下面说一下区别:

uuid1():这个是根据当前的时间戳和MAC地址生成的,最后的12个字符408d5c985711对应的就是MAC地址,因为是MAC地址,那么唯一性应该不用说了。但是生成后暴露了MAC地址这就很不好了。

uuid3():里面的namespace和具体的字符串都是我们指定的,然后呢···应该是通过MD5生成的,这个我们也很少用到,莫名其妙的感觉。

uuid4():这是基于随机数的uuid,既然是随机就有可能真的遇到相同的,但这就像中奖似的,几率超小,因为是随机而且使用还方便,所以使用这个的还是比较多的。

uuid5():这个看起来和uuid3()貌似并没有什么不同,写法一样,也是由用户来指定namespace和字符串,不过这里用的散列并不是MD5,而是SHA1.

再来说一下简单的处理,UUID生成之后不是str类型需要转为str:


uid = str(uuid.uuid4())

>>> str(uuid.uuid4())
'161ff795-58f5-4f49-bef5-864345920b77'

UUID中间的’-‘是个比较奇怪的字符,那么应该去掉它:hex

>>> uuid.uuid1().hex
'930942f5fbe511eb9118c03c59ecdff7'



版权声明:本文为d294083434原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。