python 64 进制转换 base62

创建日期: 2024-03-21 12:19 | 作者: 风波 | 浏览次数: 15 | 分类: Python
bcode = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
def int2b64(a):
    a = int(a)
    x = ''
    while a > 0:
        px = a % len(bcode)
        x = bcode[px] + x
        a = a // len(bcode)
    return x


def b642int(a):
    codelen = len(bcode)
    it = 0
    for x in a:
        xv = 0
        if ord(x) >= ord('A') and ord(x) <= ord('Z'):
            xv = ord(x) - ord('A')
        elif ord(x) >= ord('a') and ord(x) <= ord('z'):
            xv = ord(x) - ord('a') + 26
        elif ord(x) >= ord('0') and ord(x) <= ord('9'):
            xv = ord(x) - ord('0') + 52
        elif x == '+':
            xv = 62
        elif x == '/':
            xv = 63
        else:
            raise Exception("unsupported char: {}".format(x))
        it = it * codelen + xv
    return it

如果觉得 +/ 看着不舒服,那么也可以直接删除。只使用62进制的。

测试

import time

for i in range(10):
    tm = int(time.time())
    bx = int2b64(tm)
    rt = b642int(bx)
    print(tm, bx, rt, rt - tm)
    time.sleep(1)

运行结果

(1710995572, 'Bl+7h0', 1710995572, 0)
(1710995573, 'Bl+7h1', 1710995573, 0)
15 浏览
14 爬虫
0 评论