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)