短uuid生成


UUID

  • UUID是128位的全局唯一標識符,通常由32字節的字符串表示。它可以保證時間和空間的唯一性,python中稱為UUID,其他語言中可能稱為GUID。
  • 它通過MAC地址、時間戳、命名空間、隨機數、偽隨機數來保證生成ID的唯一性。
  • UUID主要有五個算法,也就是五種方法來實現:
    • uuid1()——基於時間戳。由MAC地址、當前時間戳、隨機數生成。可以保證全球范圍內的唯一性,但MAC的使用同時帶來安全性問題,局域網中可以使用IP來代替MAC。
    • uuid2()——基於分布式計算。環境DCE(Python中沒有這個函數)算法與uuid1相同,不同的是把時間戳的前4位置換為POSIX的UID。實際中很少用到該方法。
    • uuid3()——基於名字的MD5散列值。通過計算名字和命名空間的MD5散列值得到,保證了同一命名空間中不同名字的唯一性,和不同命名空間的唯一性,但同一命名空間的同一名字生成相同的uuid。
    • uuid4()——基於隨機數。由偽隨機數得到,有一定的重復概率,該概率可以計算出來。
    • uuid5()——基於名字的SHA-1散列值。算法與uuid3相同,不同的是使用 SHA-1算法。

短UUID

  • python的uuid都是32位的,比較長,處理起來效率比較低,
  • 本算法利用62個可打印字符,通過隨機生成32位UUID,由於UUID都為十六進制,所以將UUID分成8組,每4個為一組,然后通過模62操作,結果作為索引取出字符,
  • 最后生成的Uuid,只有8位,代碼如下:
#uuid4,可以換成uuid1
from uuid import uuid4
uuidChars = ("a", "b", "c", "d", "e", "f",
       "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s",
       "t", "u", "v", "w", "x", "y", "z", "0", "1", "2", "3", "4", "5",
       "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H", "I",
       "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V",
       "W", "X", "Y", "Z")
def short_uuid():
  uuid = str(uuid4()).replace('-', '')
  result = ''
  for i in range(0,8):
    sub = uuid[i * 4: i * 4 + 4]
    x = int(sub,16)
    result += uuidChars[x % 0x3E]
  return result
print(short_uuid())
print(short_uuid())
print(short_uuid())


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM