天天看點

python生成12位唯一辨別

一直在用uuid作為資料庫id,但是長度太長,是以想做個簡單的id試下

# -*- coding: utf-8 -*-
import datetime,time,random

#10進制轉換36進制
def hex36(num):
    # 正常36進制字元應為'0123456789abcdefghijklmnopqrstuvwxyz',這裡我打亂了順序
    key='t5hrwop6ksq9mvfx8g3c4dzu01n72yeabijl'
    a = []
    while num != :
        a.append(key[num%])
        num = num / 
    a.reverse()
    out = ''.join(a)
    return out

#擷取唯一辨別
def getId():
    #36進制位數對應10進制數範圍參考:
    #1位:0-35
    #2位:36-1295
    #3位:1296-46655
    #4位:46656-1679615
    #5位:1679616-60466175
    #6位:60466176-2176782335

    # 隻要秒數大于60466175,就可以轉換出6位的36進制數,這裡從2015年1月1日開始計算,約70年後會變成7位
    d1=datetime.datetime(,,)
    d2=datetime.datetime.now()
    #擷取秒數
    s=(d2-d1).days***
    #擷取微秒數
    ms=d2.microsecond
    #随機兩位字元串
    id1=hex36(random.randint(, ))
    #轉換秒數
    id2=hex36(s)
    #轉換微秒數,加46656是為了保證達到4位36進制數
    id3=hex36(ms+)

    mId=id1+id2+id3
    return mId[::-] 
           

并發一萬次,重複次數幾乎為0

并發十萬次,重複次數10個以内

應該可以滿足一般需求,以後再找更好的方案吧