`
Tony小熊
  • 浏览: 35457 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

短网址原理的算法

 
阅读更多
短网址一直都在微博上应用。例如腾讯微博的短网址url.cn,新浪的sinaurl.cn等。 他们是如何实现呢,本文将介绍一下该技术算法!
比如我们在腾讯微博上发布网址的时候,微博会自动判别网址,并将其转换,例如转换为:http://url.cn/3fVZf1
为什么要这样做的,原因有以下几点:
1、腾讯微博限制字数为140字一条,那么如果我们需要发一些连接上去,但是这个连接非常的长,以至于将近要占用我们内容的一半篇幅,这肯定是不能被允许的,所以短网址应运而生了。
2、短网址可以在我们项目里可以很好的对开放级URL进行管理。有一部分网址可以会涵盖seqing,暴力,广告等信息,这样我们可以通过用户的举报,完全管理这个连接将不出现在我们的应用中,应为同样的URL通过加密算法之后,得到的地址是一样的。
3、我们可以对一系列的网址进行流量,点击等统计,挖掘出大多数用户的关注点,这样有利于我们对项目的后续工作更好的作出决策。

其实以上三点纯属个人观点,因为在我接下来的部分项目中会应用到,所以就了解了一下,下面先来看看短网址映射算法的理论(网上找到的资料)
1)将长网址md5生成32位签名串,分为4段, 每段8个字节;
2)对这四段循环处理, 取8个字节, 将他看成16进制串与0x3fffffff(30位1)与操作, 即超过30位的忽略处理;
3)这30位分成6段, 每5位的数字作为字母表的索引取得特定字符, 依次进行获得6位字符串;
4)总的md5串可以获得4个6位串; 取里面的任意一个就可作为这个长url的短url地址;

很简单的理论,我们并不一定说得到的URL是唯一的,但是我们能够取出4组URL,这样几乎不会出现太大的重复。
下面来看看程序部分:

php代码
function shorturl($url) {
    $base_key = '';
    $base_str = 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",
    "6","7","8","9","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" );
    
    $hex    = md5($base_key.$url);
      $hexLen = strlen($hex);
      $subHexLen = $hexLen / 8;
      $output = array();
    
      for ($i = 0; $i < $subHexLen; $i++) {
        $k =  $i + 1; 
          $subHex = substr ($hex, $i * 8, 8*$k);
        $int = 0x3FFFFFFF & (1 * ('0x'.$subHex));
        $out = '';
        
        for ($j = 0; $j < 6; $j++) {
          $val = 0x0000003D & $int;
          $out .= $base_str[$val];
          $int = $int >> 5;
        }

        $output[] = $out;
  }

  return $output;
}
分享到:
评论

相关推荐

    操作系统原理算法总结

    操作系统原理算法总结 操作系统原理是计算机科学中的一门重要学科,涉及到计算机系统的底层机理和算法。本文总结了操作系统原理中的四个重要算法:进程调度算法、存储器分配算法、页面置换算法和磁盘调度算法。 一...

    分布式计算——原理、算法和系统

    下面将详细讨论分布式计算的原理、算法以及相关系统。 ### 原理 1. **资源共享**:分布式计算系统中的各个节点可以共享计算资源、存储资源和网络资源,使得整体系统能够处理更大的数据量和更高的计算需求。 2. **...

    遗传算法原理及应用 周明 孙树栋 编著

    并行遗传算法能够在短时间内处理大量数据,具有较高的计算效率,因此在工程应用中具有重要意义。而第六章则深入探讨了遗传算法的数学理论基础,包括模式定理、遗传算法的收敛性质以及适度函数的自相关分析等内容。 ...

    蚂蚁算法原理相关文章

    ### 蚂蚁算法原理详解 #### 一、引言 蚂蚁算法,也称为蚁群算法(Ant Colony Optimization, ACO),是由意大利学者Marco Dorigo于1992年在其博士论文中首次提出的一种启发式搜索算法。该算法灵感来源于自然界中蚂蚁...

    C# URL短地址压缩算法及短网址原理解析

    本文将深入探讨C#实现的URL短地址压缩算法及其原理。URL短网址服务的主要目的是解决长URL在有限字数限制下的传播问题,比如在社交媒体平台如微博上,每条消息的字数通常被限制在140字以内。长URL可能会占据过多的...

    AES算法原理及其实现

    其中,数据加密标准(DES)曾是最广泛应用的算法之一,但由于其56位密钥长度相对较短,已经无法满足现代网络安全的需求。因此,美国国家标准技术研究所(NIST)启动了一个项目,旨在寻找一种能够替代DES的新加密标准...

    Dijkstra算法原理详解

    **Dijkstra算法**,由荷兰计算机科学家艾兹格·迪科斯彻提出,是一种用于解决单源最短路径问题的算法。它适用于加权有向图或无向图,但不适用于负权重边的情况,因为该算法无法处理负权重导致的最短路径问题。在寻找...

    计算机网络原理的RIP算法

    在本文中,我们将深入探究RIP算法的原理和实现,通过C++语言实现RIP算法的编程。 一、RIP算法的基本原理 RIP算法是一种基于距离矢量路由协议,它使用hop count(跳数)作为路由 metric(度量),以确定网络中最短...

    蚁群算法原理简述

    蚁群算法,又称为蚂蚁算法或Ant Colony Optimization (ACO),是一种模拟自然界中蚂蚁寻找食物路径行为的优化算法。在自然环境中,蚂蚁通过在路径上留下化学信息素(信息素)来相互沟通,找到从巢穴到食物源的最短...

    K短路径算法源码

    总的来说,KSP算法的源码分析有助于我们深入理解路径搜索算法的底层工作原理,而提供的数据集则能让我们直观地看到算法在实际问题上的表现。无论是对于学习图论算法、优化网络系统还是进行相关研究,这些资源都是...

    短进程优先算法-操作系统

    ### 短进程优先(SPF)调度算法 短进程优先(Shortest Process Next,SPN)或称为短作业优先(Shortest Job First,SJF)是一种常用的进程调度算法,在操作系统中用于提高系统的效率和响应时间。该算法的核心思想是...

    操作系统进程调度算法——短作业优先算法c语言源代码

    #### 短作业优先算法原理 在SJF算法中,系统根据进程的预计运行时间(或服务时间)来决定哪个进程应该先执行。当一个新进程进入就绪队列时,如果它比当前正在执行的进程更短,则会在当前进程完成后被优先调度执行。...

    56丨算法实战(五):如何用学过的数据结构和算法实现一个短网址系统?1

    【短网址系统实现原理】 短网址服务是一种将长网址转换为较短的网址形式,方便在网络上传播和记忆。在实现短网址系统时,主要涉及数据结构和算法的应用。这里我们将探讨如何使用学过的数据结构和算法来创建一个短...

    先来先服务FCFS和短作业优先SJF进程调度算法

    在操作系统设计中,进程调度是核心任务之一,用于决定如何分配CPU时间给系统中的各个进程。本文将深入探讨两种常见的进程...同时,通过编程实现这些算法,可以帮助我们更好地理解它们的工作原理,提升解决问题的能力。

    操作系统先入先出算法短作业优先算法高响应比算法.

    短作业优先算法是一种基于优先级的调度算法。该算法的工作原理是:将作业按照执行时间升序排序,然后按照排序后的顺序执行作业。这意味着,执行时间最短的作业将被优先执行。 在上述代码中,SJF算法的实现通过...

    FAT32文件系统原理和FAT32文件系统算法

    ### FAT32文件系统原理和FAT32文件系统算法 #### 文件系统简介与核心概念 文件系统是操作系统用于组织和管理存储设备上的文件的方法。它不仅提供了存储和检索文件的机制,还定义了文件如何在物理存储介质上布局...

    DES算法 加密算法解密算法

    DES 算法原理 DES 算法是一种基于 Feistel 密码体制的分组加密算法。它将明文分成 64 位的分组,然后使用 56 位的密钥对每个分组进行加密。加密过程中,使用 16 轮的迭代运算,每轮迭代使用不同的子密钥。解密过程...

Global site tag (gtag.js) - Google Analytics