php实现的短网址算法分享

 更新时间:2014年06月20日 11:12:23   投稿:junjie  
这篇文章主要介绍了php实现的短网址算法,理论上支持1,073,741,824个短网址,个人使用足够了,需要的朋友可以参考下

每个网址用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://www.jb51.net/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://www.jb51.net/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://www.jb51.net/1
Output : h0xg4r
bdr3tw
osk2d3
4azfqa
 
Input : https://www.jb51.net/2
Output : tm5kxb
ceoj2s
yw3dvl
nrmrxl

相关文章

  • 3个PHP多维数组转为一维数组的方法实例

    3个PHP多维数组转为一维数组的方法实例

    这篇文章主要介绍了3个PHP多维数组转为一维数组的方法实例,分别使用foreach、for、while三种循环方法来实现,需要的朋友可以参考下
    2014-03-03
  • 基于Zend的Config机制的应用分析

    基于Zend的Config机制的应用分析

    本篇文章介绍了,基于Zend的Config机制的应用分析。需要的朋友参考下
    2013-05-05
  • 使用Composer安装Yii框架的方法

    使用Composer安装Yii框架的方法

    这篇文章主要介绍了使用Composer安装Yii框架的方法,结合具体实例分析了Composer的相关使用技巧,需要的朋友可以参考下
    2016-03-03
  • 浅析php工厂模式

    浅析php工厂模式

    本文通过实例向大家展示了php设计模式中的工厂模式,工厂模式分为三种:简单工厂、工厂方法、抽象工厂。想学习的小伙伴们千万不要错过。
    2014-11-11
  • PHP读取CSV大文件导入数据库的实例

    PHP读取CSV大文件导入数据库的实例

    下面小编就为大家带来一篇PHP读取CSV大文件导入数据库的实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-07-07
  • PHP解决高并发问题(opcache)

    PHP解决高并发问题(opcache)

    这篇文章主要介绍了PHP解决高并发问题(opcache),本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-07-07
  • Laravel中获取路由参数Route Parameters的五种方法示例

    Laravel中获取路由参数Route Parameters的五种方法示例

    这篇文章主要给大家介绍了关于Laravel中获取路由参数Route Parameters的五种方法,文中通过示例代码介绍的非常详细,对大家学习或者使用Laravel具有一定的参考学习价值,需要的朋友们下面来一起看看吧。
    2017-09-09
  • 基于php实现随机合并数组并排序(原排序)

    基于php实现随机合并数组并排序(原排序)

    最近做了一个项目,其中有这样一个需求要实现,原有帖子列表A,现在需要在A中推广新业务B,那么需要在A列表中1:1混合B中的数据,随机混合,但是需要保持A和B两列原来的数据排序,本篇文章给大家介绍基于php实现随机合并数组并排序(原排序),需要的朋友参考下
    2015-11-11
  • Laravel 集成 Geetest验证码的方法

    Laravel 集成 Geetest验证码的方法

    这篇文章主要介绍了Laravel 集成 Geetest验证码的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-05-05
  • PHP设计模式(六)桥连模式Bridge实例详解【结构型】

    PHP设计模式(六)桥连模式Bridge实例详解【结构型】

    这篇文章主要介绍了PHP设计模式:桥连模式Bridge,结合实例形式详细分析了PHP桥连模式Bridge概念、功能、原理、用法及操作注意事项,需要的朋友可以参考下
    2020-05-05

最新评论