关于短网址算法问题

这两天把小七短链接的短网址生成算法重构了,源于一个无意中的想法。

生成短网址代码的方式有很多,其核心目的就是 唯一、 尽可能少的位数还原尽可能多的网址。

网上的方法有很多,我估计多半都是互相抄的,或者本人愚钝,没能真正理解其中的奥秘。
有一种说法是将长网址进行md5加密得到长度为32的字符串,将其分成4段16进制8位数。然后和30位二进制全为1的进行与操作等等。
另外一种就是在大小写字母、数字这62个字符中随机取。

我更偏向于第二种。

改进前的代码:

// 传入 $number 为十进制序号
$out   = "";
$codes = "abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
$len = strlen($codes);
while ($number > $len-1) {$key    = $number % $len;$number = floor($number / $len) - 1;$out    = $codes{$key}.$out;
}
return $codes{$number}.$out;

以上是之前的系统 生成编码的方法,在数据库中保留了一个十进制数(序号),每次生成后该数 +1,生成过程是将此十进制数按$code转换为62进制串。
此缺点是生成的串都为递增,容易被遍历出来,这也是我要重构的主要原因。

改进后:

// 传入 $length 为随机串的长度
$strs = "23456789";
$strs .= "abcdefghijkmnpqrstuvwxyz";
$strs .= "ABCDEFGHJKLMNPQRSTUVWXYZ";
//    去掉了 容易混淆的 1lI 0oO
$len = strlen($strs);
echo $len;$random = '';
for ($i = 0; $i < $length; $i ++) {$random .= substr($strs, rand() % $len, 1);
}
return $random;

在串的选择上,删掉了一些易混淆的字符,使得62进制变为56进制,当时这也足够了。
当前系统使用3位随机串 可生成56^3=175616个短链接,就我的需求而言,已经够用了。
博客:https://blog.nanshaobit.top/99

End

关于短网址短链接生成的算法问题相关推荐

  1. 黑色简洁的PHP短网址短链接生成源码 可在后台添加广告

    黑色简洁的PHP短网址短链接生成源码 可在后台添加广告 前端: 简洁.优雅.反应灵敏的设计 创建URL.创建自定义URL.密码保护的链接.链接统计.暗色主题.小书签.复制和共享链接 后端: 删除网址. ...

  2. 黑色简洁的PHP短网址短链接生成源码

    介绍: 前端: 简洁.优雅.反应灵敏的设计创建URL.创建自定义URL.密码保护的链接.链接统计.暗色主题.小书签.复制和共享链接后端: 删除网址.编辑网站设置.添加或编辑广告.分析.使用自定义CSS ...

  3. t.cn短链接生成 - 新浪短网址生成器压缩网址详细教程

    t.cn短链接是新浪官方的短网址工具,提供在线将长链接缩短为最短形式的t.cn链接服务,生成的短网址跳转速度和访问兼容性没有任何影响,生成好的短网址永久有效,还可以通过对接调用api接口和批量生成的方 ...

  4. 短链接生成-短网址生成-短网址生成接口-短网址URL生成-短链接-短链接URL生成接口

    短链接生成-短网址生成-短网址生成接口-短网址URL生成-短链接-短链接URL生成接口[最新版]_数据API_数据应用-云市场-阿里云 如何生成短网址,短链接? 这为我们短信节约了巨额的成本 publ ...

  5. java 短链跳转原理_给你代码:短链接生成原理

    短链接,顾名思义就是在形式上比较短的链接.最早存在于微博(如新浪微博,t.cn,url.cn)分享网址中.比如这样的:t.cn/Aidjddvo 短链接的好处 内容需要(比如短信,微博中链接字数的限制 ...

  6. java,url长链接生成短链接,短链接生成器,自定义字符串,对字符串md5混合KEY加密,根据短链接获得key值,不重复的随机数,不重复的随机字符串...

    java,url长链接生成短链接,短链接生成器,自定义字符串,对字符串md5混合KEY加密,根据短链接获得key值,不重复的随机数,不重复的随机字符串 1 package com.zdz.test; ...

  7. Java短链接生成解决方案

    Java短链接生成解决方案 短链接生成的思路 原理:各大网站短链接的生成思路就是建立一个数据库,里面有长链接和对应短链接的映射,当输入短链接地址时,就去数据库查询对应的长链接,找到后,跳转到长链接 我 ...

  8. 快速理解简单的短链接生成原理

    快速理解简单的短链接生成原理 原理 计算长链接整体为一个十进制数,将其映射成一个62进制数.这个62进制由26个小写字母,26个大写字母和10个数字表示. 假设有long-url这么一个长网址,其10 ...

  9. 短链接生成平台哪个好用

    短链接生成平台哪个好用? 短网址,又称短链接,短链接对于推广来说更容易传播和识别,如果不想辛辛苦苦发的链接,最后全部变成红色.失效,赶紧短链接管理用起来! 如何选择一个靠谱的短链接管理服务平台,亲测各 ...

最新文章

  1. 杭电oj1384--Intervals(差分约束)
  2. 测试php语句执行时间
  3. Linux下su与su -命令的区别
  4. Win64 驱动内核编程-29.强制解锁文件
  5. MySQL带OR关键字的多条件查询
  6. Two-stage rotation animation is deprecated. This application should use the smoother single-stage an
  7. netty的Helloworld---netty学习笔记
  8. Liunx 系统调优
  9. mysql sql in or 替换_sql IN 的用法一例--替换 mysql longtext字段中某些内容的用法
  10. Centos 7 更改系统语言为中文
  11. 【机器学习】hist参数解读
  12. 0028-如何在CDH未启用认证的情况下安装及使用Sentry
  13. JAVE实现音频截取并上传OSS
  14. 《机器学习》周志华第三章课后习题
  15. 索尼NW-A55日版改中文
  16. 计算机毕业设计Java共享充电宝管理系统(源码+系统+mysql数据库+Lw文档)
  17. 2013-07《信息资源管理 02378》真卷解析,逐题解析+背诵技巧
  18. 2020 年我学习到的 20 条软件工程准则
  19. GeoLite2/GeoIP2---简单的ip地址定位
  20. 电商平台订单获取API接口文档

热门文章

  1. 小米10开始抓取日志怎么关闭_除了*#*#6485#*#*,小米手机还有这些神秘暗号
  2. NBUT1225 NEW RDSP MODE I(快速幂,规律)
  3. 【visio】六步完成跨职能部门业务流程图
  4. 【测试】黑盒测试用例设计方法
  5. 骚年,看我如何把 PhantomJS 图片的 XSS 升级成 SSRF/LFR
  6. java公交IC乘车卡管理系统
  7. 立竿见影的思维利器——“黄金思维圈”
  8. 2016版excel_开启下一个十年,全新 Microsoft 365 订阅版终于来了!
  9. 保持良好的人际关系,赢得好人缘的八大诀窍
  10. 游戏保护_CRC32检测