0x01
首先介紹一下什么是 base36編碼揖膜,它的編碼中包含0~9的數(shù)字,加上所有26個字母姿锭,不區(qū)分大小寫塔鳍,不包含任何標(biāo)點(diǎn),所有的字母要不全大寫呻此,要不全小寫轮纫。所以加起來就是 "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ",
或者 '0123456789abcdefghijklmnopqrstuvwxyz',同樣的還有 base62編碼焚鲜,就是26個字母的大小寫再加上0-9掌唾,一共62個字符。
base62 編碼在短地址服務(wù)中用的比較多忿磅,比如這種: http://dwz.cn/1qPNt糯彬, 有關(guān)怎么設(shè)計一個高性能的短地址服務(wù)在這里有個回答的不錯(https://www.zhihu.com/question/29270034) ,大家可以參考葱她。今天主要說的是 django 中 base36 和 int 之間的轉(zhuǎn)換撩扒。代碼如下
def int_to_base36(i):
"""
Converts an integer to a base36 string
"""
char_set = '0123456789abcdefghijklmnopqrstuvwxyz'
if i < 36:
return char_set[i]
b36 = ''
while i != 0:
i, n = divmod(i, 36)
b36 = char_set[n] + b36
return b36
>>> int_to_base36(123456)
'2n9c'
>>> int('2n9c', 32)
89388
>>>
這個函數(shù)主要用于 django auth 模塊自帶的密碼重置生成 token 模塊 default_token_generator 中。