一直在用uuid作為資料庫id,但是長度太長,所以想做個簡單的id試下
# -*- coding: utf-8 -*-
import datetime,time,random
#10進製轉換36進製
defhex36
(num):
# 正常36進製字元應為'0123456789abcdefghijklmnopqrstuvwxyz',這裡我打亂了順序
key='t5hrwop6ksq9mvfx8g3c4dzu01n72yeabijl'
a =
while num != 0:
num = num / 36
a.reverse()
out = ''.join(a)
return out
#獲取唯一標識
defgetid
():#36進製位數對應10進製數範圍參考:
#1位:0-35
#2位:36-1295
#3位:1296-46655
#4位:46656-1679615
#5位:1679616-60466175
#6位:60466176-2176782335
# 只要秒數大於60466175,就可以轉換出6位的36進製數,這裡從2023年1月1日開始計算,約70年後會變成7位
d1=datetime.datetime(2015,1,1)
d2=datetime.datetime.now()
#獲取秒數
s=(d2-d1).days*24*60*60
#獲取微秒數
ms=d2.microsecond
#隨機兩位字串
id1=hex36(random.randint(36, 1295))
#轉換秒數
id2=hex36(s)
#轉換微秒數,加46656是為了保證達到4位36進製數
id3=hex36(ms+46656)
mid=id1+id2+id3
return mid[::-1]
併發一萬次,重複次數幾乎為0
併發十萬次,重複次數10個以內
應該可以滿足一般需求,以後再找更好的方案吧
生成唯一標識id
python 中獲取執行緒id def sys order id 在高併發分布式情況下生成唯一標識id import random import threading import ctypes import time import os 只有一台伺服器生成單號 所以ip固定 後續考慮可以使用執行緒號...
IOS IOS 生成裝置唯一標識
前言 ios裝置5.0以上放棄使用 uidevice currentdevice uniqueidentifier 來獲得裝置唯一id ios裝置私有方法禁止使用者獲取和使用imei 需求需要乙個能夠標識裝置唯一性的id 1 使用cfuuidcreatestring null,cfuuidcreat...
IOS IOS 生成裝置唯一標識
前言 ios裝置5.0以上放棄使用 uidevice currentdevice uniqueidentifier 來獲得裝置唯一id ios裝置私有方法禁止使用者獲取和使用imei 需求需要乙個能夠標識裝置唯一性的id 1 使用cfuuidcreatestring null,cfuuidcreat...