php实现的短网址算法分享


Posted in PHP onJune 20, 2014

每个网址用6个字符代替,(6^32) 最多可以拥有1,073,741,824个短网址。
当然,你还可以记录更详细的信息,如访问记录,创建时间等。
如果真不够用了,还可以删掉很久不用的。

function shorturl($input) {

  $base32 = array (

    'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h',

    'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p',

    'q', 'r', 's', 't', 'u', 'v', 'w', 'x',

    'y', 'z', '0', '1', '2', '3', '4', '5'

    );

 

  $hex = md5($input);

  $hexLen = strlen($hex);

  $subHexLen = $hexLen / 8;

  $output = array();

 

  for ($i = 0; $i < $subHexLen; $i++) {

    $subHex = substr ($hex, $i * 8, 8);

    $int = 0x3FFFFFFF & (1 * ('0x'.$subHex));

    $out = '';

 

    for ($j = 0; $j < 6; $j++) {

      $val = 0x0000001F & $int;

      $out .= $base32[$val];

      $int = $int >> 5;

    }

 

    $output[] = $out;

  }

 

  return $output;

}

测试代码:

$input = 'https://3water.com/1';

$output = shorturl($input);

 

echo "Input  : $input\n";

echo "Output : {$output[0]}\n";

echo "         {$output[1]}\n";

echo "         {$output[2]}\n";

echo "         {$output[3]}\n";

echo "\n";

 

$input = 'https://3water.com/2';

$output = shorturl($input);

 

echo "Input  : $input\n";

echo "Output : {$output[0]}\n";

echo "         {$output[1]}\n";

echo "         {$output[2]}\n";

echo "         {$output[3]}\n";

echo "\n";

输出:

Input : https://3water.com/1

Output : h0xg4r

bdr3tw

osk2d3

4azfqa

 

Input : https://3water.com/2

Output : tm5kxb

ceoj2s

yw3dvl

nrmrxl
PHP 相关文章推荐
php 中文和编码判断代码
May 16 PHP
Trying to clone an uncloneable object of class Imagic的解决方法
Jan 11 PHP
openflashchart 2.0 简单案例php版
May 21 PHP
ThinkPHP使用心得分享-上传类UploadFile的使用
May 15 PHP
php对数组内元素进行随机调换的方法
May 12 PHP
PHP面向对象程序设计实例分析
Jan 26 PHP
PHP数据对象PDO操作技巧小结
Sep 27 PHP
php版微信数据统计接口用法示例
Oct 12 PHP
PHP下的浮点运算不准的解决方法
Oct 27 PHP
CI框架(CodeIgniter)操作redis的方法详解
Jan 25 PHP
PHP使用file_get_contents发送http请求功能简单示例
Apr 29 PHP
PHP For循环字母A-Z当超过26个字母时输出AA,AB,AC
Feb 16 PHP
ThinkPHP3.1之D方法实例详解
Jun 20 #PHP
php写的AES加密解密类分享
Jun 20 #PHP
PHP提交表单失败后如何保留已经填写的信息
Jun 20 #PHP
将酷狗krc歌词解析并转换为lrc歌词php源码
Jun 20 #PHP
Yii Framework框架获取分类下面的所有子类方法
Jun 20 #PHP
windows下配置apache+php+mysql时出现问题的处理方法
Jun 20 #PHP
PHP扩展CURL的用法详解
Jun 20 #PHP
You might like
将酷狗krc歌词解析并转换为lrc歌词php源码
2014/06/20 PHP
PHP实现简单爬虫的方法
2015/07/29 PHP
PHP开发的微信现金红包功能示例
2017/06/29 PHP
laravel框架模型和数据库基础操作实例详解
2020/01/25 PHP
javascript实现动态CSS换肤技术的脚本
2007/06/29 Javascript
asp.net和asp下ACCESS的参数化查询
2008/06/11 Javascript
Shell脚本实现Linux系统和进程资源监控
2015/03/05 Javascript
javascript原型模式用法实例详解
2015/06/04 Javascript
JS简单测试循环运行时间的方法
2016/09/04 Javascript
浅谈EasyUi ComBotree树修改 父节点选择的问题
2016/11/07 Javascript
Javascript计算二维数组重复值示例代码
2016/12/18 Javascript
jQuery实现拖拽可编辑模块功能代码
2017/01/12 Javascript
js实现倒计时效果(小于10补零)
2017/03/08 Javascript
nodejs个人博客开发第六步 数据分页
2017/04/12 NodeJs
JS实现把一个页面层数据传递到另一个页面的两种方式
2018/08/13 Javascript
详解JavaScript事件循环机制
2018/09/07 Javascript
构建大型 Vue.js 项目的10条建议(小结)
2019/11/14 Javascript
原生js实现文件上传、下载、封装等实例方法
2020/01/05 Javascript
[59:48]LGD vs IG 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
python进阶教程之函数参数的多种传递方法
2014/08/30 Python
Python运行报错UnicodeDecodeError的解决方法
2016/06/07 Python
python 实现对文件夹内的文件排序编号
2018/04/12 Python
Django之提交表单与前后端交互的方法
2019/07/19 Python
Python使用微信itchat接口实现查看自己微信的信息功能详解
2019/08/22 Python
python将字典列表导出为Excel文件的方法
2019/09/02 Python
Python多线程模块Threading用法示例小结
2019/11/09 Python
利用Python pandas对Excel进行合并的方法示例
2020/11/04 Python
健康监测猫砂:Pretty Litter
2017/05/25 全球购物
惊艳的手工时装首饰:Migonne Gavigan
2018/02/23 全球购物
Guess荷兰官网:美国服饰品牌
2020/01/22 全球购物
澳大利亚一站式数码相机商店:CameraPro
2020/03/09 全球购物
机修工工作职责
2014/02/21 职场文书
缅怀先烈演讲稿
2014/09/03 职场文书
12.4全国法制宣传日活动方案
2014/11/02 职场文书
《折线统计图》教学反思
2016/02/22 职场文书
React 高阶组件HOC用法归纳
2021/06/13 Javascript