一直在用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個以内
應該可以滿足一般需求,以後再找更好的方案吧