Python 将长度32的UUID 压缩为长度为22的字符串

通用唯一识别码(英语:Universally Unique Identifier,缩写:UUID)是用于计算机体系中以识别信息数目的一个128位标识符,还有相关的术语:全局唯一标识符(GUID)。

根据标准方法生成,不依赖中央机构的注册和分配,UUID具有唯一性,这与其他大多数编号方案不同。重复UUID码概率接近零,可以忽略不计。

python 的uuid库经常被用来生成一个随机字符串,在系统中作为唯一id,UUID的标准型式包含32个16进制数字,以连字号分为五段,形式为8-4-4-4-12的32个字符。形式如下:

>>> import uuid
>>> str(uuid.uuid1())
'b92bd938-ecb8-11e9-8327-4c32758a42bd'

但是32位字符串太长了,有什么办法可以将它压缩一下呢?

首先我们会想到,"-" 可以去掉,如下图,生成28位的字符串:

>>> str(uuid.uuid4()).replace('-', '')
'255eab6c057245a7b3afcef8b264c83d'

 28位还是太长了,这时可以考虑使用Base64编码,压缩到22位长度:

>>> uuidstring = str(uuid.uuid4()).replace('-', '')
>>> uuid.UUID(uuidstring).bytes.encode('base64').rstrip('=\n')
'5vxL3PwPQOeMhhPv/PERrg'

将其封装为方法后如下:

# 获取压缩成22位的UUID
def compressUuid():
    uuidstring = str(uuid.uuid4()).replace('-', '')
    return uuid.UUID(uuidstring).bytes.encode('base64').rstrip('=\n')

# 解压缩UUID,获得原始UUID
def decompressUuid(compressedUuid):
    return str(uuid.UUID(bytes=(compressedUuid + '==').decode('base64')))

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章