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 相关文章推荐
使用无限生命期Session的方法
Oct 09 PHP
用户的详细注册和判断
Oct 09 PHP
php unset全局变量运用问题的深入解析
Jun 17 PHP
探讨:php中在foreach中使用foreach ($arr as &amp;$value) 这种类型的解释
Jun 24 PHP
解析php做推送服务端实现ios消息推送
Jul 01 PHP
thinkphp循环结构用法实例
Nov 24 PHP
PHP获取真实客户端的真实IP
Mar 07 PHP
PHP PDO操作MySQL基础教程
Jun 05 PHP
thinkPHP5.0框架验证码调用及点击图片刷新简单实现方法
Sep 07 PHP
PHP中使用CURL发送get/post请求上传图片批处理功能
Oct 15 PHP
PHP实现二维数组(或多维数组)转换成一维数组的常见方法总结
Dec 04 PHP
thinkphp5.1框架模板赋值与变量输出示例
May 25 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
分页显示Oracle数据库记录的类之一
2006/10/09 PHP
php简单判断文本编码的方法
2015/07/30 PHP
Yii2框架中日志的使用方法分析
2017/05/22 PHP
PHP7新增函数
2021/03/09 PHP
40个有创意的jQuery图片和内容滑动及弹出插件收藏集之二
2011/12/31 Javascript
js内存泄露的几种情况详细探讨
2013/05/31 Javascript
js添加table的行和列 具体实现方法
2013/07/22 Javascript
详解JavaScript中setSeconds()方法的使用
2015/06/11 Javascript
jQuery前端开发35个小技巧
2016/05/24 Javascript
使用伪命名空间封装保护独自创建的对象方法
2016/08/04 Javascript
Seajs是什么及sea.js 由来,特点以及优势
2016/10/13 Javascript
form表单序列化详解(推荐)
2017/08/15 Javascript
JS实现颜色的10进制转化成rgba格式的方法
2017/09/04 Javascript
Vue.JS实现垂直方向展开、收缩不定高度模块的JS组件
2018/06/19 Javascript
JS实现提示效果弹出及延迟隐藏的功能
2019/08/26 Javascript
关于layui 下拉列表的change事件详解
2019/09/20 Javascript
JavaScript实现简单进度条效果
2020/03/25 Javascript
原生js实现html手机端城市列表索引选择城市
2020/06/24 Javascript
javascript实现多边形碰撞检测
2020/10/24 Javascript
swiperjs实现导航与tab页的联动
2020/12/13 Javascript
[02:15]2015国际邀请赛选手档案IG.Ferrari 430
2015/07/30 DOTA
使用Python操作Elasticsearch数据索引的教程
2015/04/08 Python
使用Python调取任意数字资产钱包余额功能
2019/08/15 Python
Tensorflow进行多维矩阵的拆分与拼接实例
2020/02/07 Python
Python处理mysql特殊字符的问题
2020/03/02 Python
Cole Haan官方网站:美国时尚潮流品牌
2017/12/06 全球购物
捷克原创男装和女装购物网站:Bolf.cz
2018/04/28 全球购物
Conforama瑞士:家具、厨房、电器、装饰
2020/09/06 全球购物
PHP中如何创建和修改数组
2012/05/02 面试题
Java面试题及答案
2012/09/08 面试题
学校运动会开幕演讲稿
2014/01/04 职场文书
如何撰写一封出色的求职信
2014/04/27 职场文书
2014年家长学校工作总结
2014/11/20 职场文书
2014年司机工作总结
2014/11/21 职场文书
掌握这项技巧,一年阅读300本书不是梦
2019/09/12 职场文书
Python循环之while无限迭代
2022/04/30 Python