好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

PHP如何实现短网址

余数得到的数字是16、8,然后找到字母表里面角标为16和8的字符拼起来,就是g8,非常短,只有2位数!假如说我们想至少产生6位字符,那么我们可以从一个比较大的数字开始,具体可以看下图:

1位 62 0 - 61 2位 3844 62 - 3843 3位 约 23万 3844 - 238327 4位 约 1400万 238328 - 14776335 5位 约 9.1亿 14776336 - 916132831 6位 约 568亿 916132832 - 56800235583

二.Hash算法

第一种方式:

简单的对长链接进行加盐md5,会生成一个32位的字符串,随机从里面取6个字符,或者简单粗暴取最后6位,但是md5只包含0-9A-Fa-f,比字母表的里面字符还少,冲突几率更大!

第二种方式:

1.将长网址 md5 生成 32 位签名串,分为 4 段, 每段 8 个字节

2.对这四段循环处理, 取 8 个字节, 将他看成 16 进制串与 0x3fffffff(30位1) 与操作, 即超过 30 位的忽略处理

3.这 30 位分成 6 段, 每 5 位的数字作为字母表的索引取得特定字符, 依次进行获得 6 位字符串

4.总的 md5 串可以获得 4 个 6 位串,取里面的任意一个就可作为这个长 url 的短 url 地址

生成的方式更加复杂,重复的几率低,但是依然会出现冲突!

三.随机数算法

这个更简单,直接对这个62个字符数组做随机选择,选择其中6个字符当作短链接码,简单易用,但是难免会出现重复冲突!

四.算法对比

第一种算法只要解决自增id问题就可以避免冲突,自增id可以采用数据库自增主键,每次生成短码只需一次数据库操作(insert操作,获取主键id,然后算出短码即可)

第二种和第三种算法其实都差不多,都是依赖于程序随机,容易出现冲突,这就需要每次在插入数据库的时候判重,效率低一些!

5.安全

短链接虽然方便了传输和记忆,但是由于链接组成的字符个数少,更容易被爆破、猜测攻击,攻击者可以轻松遍历所有字符组成的链接!

所以不建议使用短链接发送具有私密性的网址,比如说重置密码链接,对一些权限、敏感信息的链接要做好二次鉴权!

推荐教程: Laravel实战开发短链生成器视频教程

以上就是PHP如何实现短网址的详细内容,更多请关注Gxl网其它相关文章!

查看更多关于PHP如何实现短网址的详细内容...

  阅读:48次