<tfoot id='zhnaB'></tfoot>
    • <bdo id='zhnaB'></bdo><ul id='zhnaB'></ul>
  • <i id='zhnaB'><tr id='zhnaB'><dt id='zhnaB'><q id='zhnaB'><span id='zhnaB'><b id='zhnaB'><form id='zhnaB'><ins id='zhnaB'></ins><ul id='zhnaB'></ul><sub id='zhnaB'></sub></form><legend id='zhnaB'></legend><bdo id='zhnaB'><pre id='zhnaB'><center id='zhnaB'></center></pre></bdo></b><th id='zhnaB'></th></span></q></dt></tr></i><div id='zhnaB'><tfoot id='zhnaB'></tfoot><dl id='zhnaB'><fieldset id='zhnaB'></fieldset></dl></div>

  • <legend id='zhnaB'><style id='zhnaB'><dir id='zhnaB'><q id='zhnaB'></q></dir></style></legend>
      1. <small id='zhnaB'></small><noframes id='zhnaB'>

      2. php实现的短网址算法分享

        时间:2023-12-12

        1. <legend id='KsgzO'><style id='KsgzO'><dir id='KsgzO'><q id='KsgzO'></q></dir></style></legend>

            <small id='KsgzO'></small><noframes id='KsgzO'>

            1. <i id='KsgzO'><tr id='KsgzO'><dt id='KsgzO'><q id='KsgzO'><span id='KsgzO'><b id='KsgzO'><form id='KsgzO'><ins id='KsgzO'></ins><ul id='KsgzO'></ul><sub id='KsgzO'></sub></form><legend id='KsgzO'></legend><bdo id='KsgzO'><pre id='KsgzO'><center id='KsgzO'></center></pre></bdo></b><th id='KsgzO'></th></span></q></dt></tr></i><div id='KsgzO'><tfoot id='KsgzO'></tfoot><dl id='KsgzO'><fieldset id='KsgzO'></fieldset></dl></div>
                  <tbody id='KsgzO'></tbody>
                <tfoot id='KsgzO'></tfoot>
                  <bdo id='KsgzO'></bdo><ul id='KsgzO'></ul>
                  1. 前言

                  随着互联网技术的发展,越来越多的网站采用短链接,将长网址转化为短链接,方便用户使用,并且会提高网站的安全性和速度。本文将介绍采用php实现的短网址算法。

                  1. 基本原理

                  短网址的实现流程是:将长网址转化为短网址,用户点击短网址时将短网址还原成长网址,实现原理如下:

                  • 将长网址进行MD5加密得到一个32位的字符串,然后将这个字符串分成4份,每份8个字节,转换成16进制数,得到4个4位的字符串。
                  • 从这个16进制数割出12个部分,每部分5位,再将其转换成10进制数,得到12个数字。
                  • 将这12个数字处理成短网址中的字符。

                  短网址中字符有62个(a-z、A-Z、0-9),因此在将数字转换成62进制字符时,需要将12位的数字拆成6组,每组2位,以a-z、A-Z、0-9的顺序逐个选取一个字符,这样就得到了6个字符,作为短网址的一部分。最后将6个字符拼接起来,作为短网址输出。

                  1. 代码实现

                  下面采用php语言实现短网址算法。代码分为两个部分:长网址转化为短网址的函数和短网址还原成长网址的函数。

                  3.1 长网址转化为短网址

                  <?php
                  function shorturl($url)
                  {
                      // 要进行处理的网址
                      $url = md5($url);
                      $url_short = array();
                      $url_len = strlen($url);
                      for ($i = 0; $i < 4; $i++) {
                          $sub_str = substr($url, $i * 8, 8);
                          $url_short[$i] = 0x3FFFFFFF & (1 * hexdec($sub_str));
                      }
                      $result = array();
                      for ($i = 0; $i < 6; $i++) {
                          $index = 0x0000003D & $url_short[$i];
                          $result[] = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'[$index];
                      }
                      return implode('', $result);
                  }
                  ?>
                  

                  该函数的参数为长网址,返回值为短网址。

                  3.2 短网址还原为长网址

                  <?php
                  function longurl($url_short)
                  {
                      $url_short = str_split($url_short);
                      $url_len = count($url_short);
                      $url = array();
                      for ($i = 0; $i < $url_len; $i++) {
                          if ($url_short[$i] >= '0' && $url_short[$i] <= '9') {
                              $url[] = ord($url_short[$i]) - 48;
                          } else if ($url_short[$i] >= 'a' && $url_short[$i] <= 'z') {
                              $url[] = ord($url_short[$i]) - 87;
                          } else if ($url_short[$i] >= 'A' && $url_short[$i] <= 'Z') {
                              $url[] = ord($url_short[$i]) - 29;
                          } else {
                              return false;
                          }
                      }
                      $num10 = $url[0] * 56800235584 + $url[1] * 916132832 + $url[2] * 14776336 + $url[3] * 238328 + $url[4] * 3844 + $url[5] * 62;
                      $result = sprintf("%u", $num10);
                      $md5 = substr(md5($result), 0, 8);
                      $result = 'http://www.domain.com/' . $md5;
                      return $result;
                  }
                  ?>
                  

                  该函数的参数为短网址,返回值为长网址。

                  1. 示例说明

                  使用本文提供的php代码,可以将任意长的网址转化为6位的短网址,如下:

                  <?php
                      $long_url = 'http://www.domain.com/longlonglonglonglonglong';
                      $short_url = shorturl($long_url);
                      // 返回的值为 x2km8M
                  ?>
                  

                  还原短网址为长网址的过程如下:

                  <?php
                      $short_url = 'x2km8M';
                      $long_url = longurl($short_url);
                      // 返回的值为 http://www.domain.com/longlonglonglonglonglong
                  ?>
                  
                  1. 总结

                  以上是采用php实现的短网址算法分享。在短网址生成和还原的过程中,需要注意url_short数组的处理,以及其中数字的转换。

                  上一篇:php实现微信公众号企业转账功能 下一篇:初探PHP5

                  相关文章

                • <tfoot id='lqsCy'></tfoot>

                  <i id='lqsCy'><tr id='lqsCy'><dt id='lqsCy'><q id='lqsCy'><span id='lqsCy'><b id='lqsCy'><form id='lqsCy'><ins id='lqsCy'></ins><ul id='lqsCy'></ul><sub id='lqsCy'></sub></form><legend id='lqsCy'></legend><bdo id='lqsCy'><pre id='lqsCy'><center id='lqsCy'></center></pre></bdo></b><th id='lqsCy'></th></span></q></dt></tr></i><div id='lqsCy'><tfoot id='lqsCy'></tfoot><dl id='lqsCy'><fieldset id='lqsCy'></fieldset></dl></div>

                  <legend id='lqsCy'><style id='lqsCy'><dir id='lqsCy'><q id='lqsCy'></q></dir></style></legend>
                  1. <small id='lqsCy'></small><noframes id='lqsCy'>

                    • <bdo id='lqsCy'></bdo><ul id='lqsCy'></ul>