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随机数生成代码与使用实例分析
Apr 08 PHP
利用PHP+JS实现搜索自动提示(实例)
Jun 09 PHP
9条PHP编程小知识及易犯的小错误
Jan 22 PHP
PHP中文竖排转换实现方法
Oct 23 PHP
浅谈PHP中foreach/in_array的使用
Nov 02 PHP
PHP实现163邮箱自动发送邮件
Mar 29 PHP
php显示页码分页类的封装
Jun 08 PHP
Laravel构建即时应用的一种实现方法详解
Aug 31 PHP
PHP格式化显示时间date()函数代码
Oct 03 PHP
PHP实时统计中文字数和区别
Feb 28 PHP
在laravel框架中使用model层的方法
Oct 08 PHP
laravel框架使用阿里云短信发送消息操作示例
Feb 15 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
我的群发邮件程序
2006/10/09 PHP
Java和PHP在Web开发方面对比分析
2015/03/01 PHP
php file_get_contents取文件中数组元素的方法
2017/04/01 PHP
JavaScript 学习笔记(十一)
2010/01/19 Javascript
Js日期选择器并自动加入到输入框中示例代码
2013/08/02 Javascript
Angular用来控制元素的展示与否的原生指令介绍
2015/01/07 Javascript
javascript获取重复次数最多的字符
2015/07/08 Javascript
一道常被人轻视的web前端常见面试题(JS)
2016/02/15 Javascript
bootstrapValidator.min.js表单验证插件
2017/02/09 Javascript
JS实现table表格固定表头且表头随横向滚动而滚动
2017/10/26 Javascript
在vue项目中引入highcharts图表的方法(详解)
2018/03/05 Javascript
解决Nodejs全局安装模块后找不到命令的问题
2018/05/15 NodeJs
详解Webpack + ES6 最新环境搭建与配置
2018/06/04 Javascript
JS与jQuery判断文本框还剩多少字符可以输入的方法
2018/09/01 jQuery
JS动画实现回调地狱promise的实例代码详解
2018/11/08 Javascript
JS实现头条新闻的经典轮播图效果示例
2019/01/30 Javascript
es6数据变更同步到视图层的方法
2019/03/04 Javascript
VUE实现自身整体组件销毁的示例代码
2020/01/13 Javascript
解决新建一个vue项目过程中遇到的问题
2020/10/22 Javascript
js异步接口并发数量控制的方法示例
2020/11/22 Javascript
[46:23]完美世界DOTA2联赛PWL S2 FTD vs Magma 第一场 11.20
2020/11/23 DOTA
批处理与python代码混合编程的方法
2016/05/19 Python
django的登录注册系统的示例代码
2018/05/14 Python
PyCharm代码格式调整方法
2018/05/23 Python
numpy返回array中元素的index方法
2018/06/27 Python
使用python批量读取word文档并整理关键信息到excel表格的实例
2018/11/07 Python
Python实战购物车项目的实现参考
2019/02/20 Python
Python内置方法实现字符串的秘钥加解密(推荐)
2019/12/09 Python
python爬虫模拟浏览器访问-User-Agent过程解析
2019/12/28 Python
pytorch GAN伪造手写体mnist数据集方式
2020/01/10 Python
Python random模块的使用示例
2020/10/10 Python
优秀毕业生求职信范文
2014/01/02 职场文书
《骆驼和羊》教学反思
2014/02/27 职场文书
三好学生个人先进事迹材料
2014/05/17 职场文书
优秀班主任主要事迹材料
2014/12/16 职场文书
2015年店长工作总结范文
2015/04/08 职场文书