UUID: 通用唯一标识符 ( Universally Unique Identifier )的简写, 对于所有的UUID它可以保证在空间和时间上的唯一性。它是通过MAC地址, 时间戳, 命名空间, 随机数, 伪随机数来保证生成ID的唯一性, 有着固定的大小( 128 bit )。
它的唯一性和一致性特点使得可以无需注册过程就能够产生一个新的UUID,它可以被用作多种用途,既可以用来短时间内标记一个对象, 也可以可靠的辨别网络中的持久性对象。
python的uuid模块提供UUID类和函数uuid1(), uuid3(), uuid4(), uuid5() 来生成1, 3, 4, 5各个版本的UUID ( 需要注意的是: python中没有uuid2()这个函数). 用uuid1()或uuid4()可以获得一个唯一的ID,uuid1()包含了主机的网络名称,uuid4()不涉及网络主机名,仅生成一个随机UUID,因此从隐私保护角度uuid4()更加安全。对uuid模块中最常用的几个函数总结如下:
# -*- coding:utf-8 -*-
import uuid
print uuid.uuid1()
# 9fcb54d5-5cd1-11ee-9c40-e0d55e9f6355
print uuid.uuid3(uuid.NAMESPACE_DNS, 'love')
# 6deda52b-c8aa-3a78-907c-5826c79b7364
print uuid.uuid4()
# 894e75e9-d926-428c-abe0-cfd322e632fc
print uuid.uuid5(uuid.NAMESPACE_DNS, 'love')
# 1fc3f5f4-6a98-5913-82ef-406f1118aa65
下面说一下区别:
uuid1():这个是根据当前的时间戳和MAC地址生成的,最后的12个字符e0d55e9f6355对应的就是MAC地址,因为是MAC地址,那么唯一性应该不用说了。但是生成后暴露了MAC地址这就很不好了。
uuid3():里面的namespace和具体的字符串都是我们指定的,然后呢···应该是通过MD5生成的,这个我们也很少用到,莫名其妙的感觉。
uuid4():这是基于随机数的uuid,既然是随机就有可能真的遇到相同的,但这就像中奖似的,几率超小,因为是随机而且使用还方便,所以使用这个的还是比较多的。
uuid5():这个看起来和uuid3()貌似并没有什么不同,写法一样,也是由用户来指定namespace和字符串,不过这里用的散列并不是MD5,而是SHA1.
再来说一下简单的处理,UUID生成之后不是str类型需要转为str:
uid = str(uuid.uuid4())
>>> str(uuid.uuid4())
'44a34eb5-aaa6-43ac-8f33-e1362e568256'
UUID中间的'-'是个比较奇怪的字符,那么应该去掉它:hex
>>> uuid.uuid1().hex
'3b6fcaef5cd211eea2bee0d55e9f6355' //注意最后的12个字符还是 e0d55e9f6355(对应你的Mac地址)
网友评论