一直在用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个以内
应该可以满足一般需求,以后再找更好的方案吧