实现原理
在数据库中把 短链和长链进行映射; 表字段 id(自增), longurl, shorturl;
使用 0-9a-zA-Z 组合成五位(62^5) 或者六位(62^6) 字符来表示字段id ; 短链 和 id 进行相互转化,使用进制即可达到映射及唯一的效果;
python 代码实现
from random import shuffle
secret = 'abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'
# secret = 'YTiqlfv682MtKzV0RjLgpWJwmXAbcNkIoyPZda9ExO3S7FBnGU15eHshDuQCr4'
# 字符串打乱
def random_string(s):
s = list(s)
shuffle(s)
print("".join(s))
return "".join(s)
# 十进制转换到62进制
def encode62(id):
num_list = []
while (id > 0):
remainder = id % 62
num_list.insert(0, secret[remainder])
id = id // 62
return "".join(num_list).rjust(6, secret[0])
# 62进制转换到十进制
def decode62(secret_str):
num_list = list(map(secret.index, secret_str))
num_sum = 0
for i, num in enumerate(num_list[::-1]):
num_sum += num * 62**i
return num_sum
print(encode62(138))
print(decode62(encode62(138)))