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')))

 

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