0x01
首先介绍一下什么是 base36编码,它的编码中包含0~9的数字,加上所有26个字母,不区分大小写,不包含任何标点,所有的字母要不全大写,要不全小写。所以加起来就是 "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ",
或者 '0123456789abcdefghijklmnopqrstuvwxyz',同样的还有 base62编码,就是26个字母的大小写再加上0-9,一共62个字符。
base62 编码在短地址服务中用的比较多,比如这种: http://dwz.cn/1qPNt, 有关怎么设计一个高性能的短地址服务在这里有个回答的不错(https://www.zhihu.com/question/29270034) ,大家可以参考。今天主要说的是 django 中 base36 和 int 之间的转换。代码如下
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
>>>
这个函数主要用于 django auth 模块自带的密码重置生成 token 模块 default_token_generator 中。
网友评论