为了账号安全,请及时绑定邮箱和手机立即绑定

关于短网址算法的问题

关于短网址算法的问题

慕勒3428872 2019-04-16 20:26:51
在网上看到如下的短网址算法  1)将长网址md5生成32位签名串,分为4段,每段8个字节;  2)对这四段循环处理,取8个字节,将他看成16进制串与0x3fffffff(30位1)与操作,即超过30位的忽略处理;  3)这30位分成6段,每5位的数字作为字母表的索引取得特定字符,依次进行获得6位字符串;  4)总的md5串可以获得4个6位串;取里面的任意一个就可作为这个长url的短url地址;实现的版本也很多,但是我不明白为什么要这样实现,为什么要超过30位要忽略,为啥要生成四个串?如果生存四个串的话,直接把md5分成4段然后做base62转换不行么?
查看完整描述

2 回答

?
FFIVE

TA贡献1797条经验 获得超6个赞

首先短网址生成是由于在微博等短文本应用中,长的地址占用空间太大,所以需要短网址服务商将长网址和短网址进行映射,楼主说的base62就是转换为62进制的数字。62是[a-zA-Z0-9]的数量。
楼主说的位和字节感觉概念有混乱,我理解的是这样的
md5->长度为32的16进制数,比如a32f232a0ba32f232a0ba32f232a0b11,然后把这个[1-8][9-16][17-24][25-32],分成了4段,每段有8位16进制的数,一个16进制相当于4位的二进制[1111]=15=F,所以每段相当于32位的二进制,然后取了后30位,后30位平分为6段,每段长度为5bit,相当于有32个数,所以那个映射表估计是[a-z0-5],当然也可以平均分为5段,每段长度为6bit,这样就有64个,可以[a-zA-Z0-9]再加两个其它字符(所以这时应该理解为啥要每段5bit了)。
之前不是分为了4段吗,所以最后长度就是4了。
直接md5分四段在base62也可以啊,就看你映射函数怎么写了,如何从每段的2^32个数映射到62个中的一个
                            
查看完整回答
反对 回复 2019-04-16
  • 2 回答
  • 0 关注
  • 310 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信