UUID

UUID(Universally Unique Identifier)是通用唯一识别码,在许多领域用作标识,比如我们常用的数据库也可以用它来作为主键,原理上它是可以对任何东西进行唯一的编码的。作为新手一看到类似varchar(40)这样的主键就觉得有点蒙圈了,字符串型也不能自增啊,这里就应该应用UUID了。数据库一般都有自己的办法生成UUID,但虽然可以用,但这玩意考虑到可读性和有点坑的长度还是尽量不要用这玩意做主键

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

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# -*- coding:utf-8 -*-
from uuid import uuid1,uuid3,uuid4,uuid5
 
print(uuid1())
#bf1dfacf-67d8-11e8-9a23-408d5c985711
print(uuid3(uuid.NAMESPACE_DNS, 'yuanlin'))
#ddb366f5-d4bc-3a20-ac68-e13c0560058f
print(uuid4())
#144d622b-e83a-40ea-8ca1-66af8a86261c
print(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中间的’-‘是个比较奇怪的字符,那么应该去掉它,这其实超简单:

1
uid = str(uuid4()).replace('-','')

生成所有字母及数字

1
2
3
4
5
import string   # 导入string这个模块
print(string.digits)  # 输出包含数字0~9的字符串
print(string.ascii_letters)  # 包含所有字母(大写或小写)的字符串
print(string.ascii_lowercase)  # 包含所有小写字母的字符串
print(string.ascii_uppercase)  # 包含所有大写字母的字符串

生成简短序列

1
2
3
4
5
6
7
8
9
# 将所有字母数字组成一个tuple
uuidchars = ("a",...,"z")
# 去掉'-'后,总长度为32
uid = str(uuid4()).replace('-','')
result = ""
for i in range(0,8):
    sub = uid[i*4 : i*4+4]
    x = int(sub, 16)
    result += uuidchars[x % 0x3E]

Reference

1、https://blog.csdn.net/yl416306434/article/details/80569688

打赏

微信 微信 支付宝 支付宝
万分感谢