• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            Shuffy

            不斷的學習,不斷的思考,才能不斷的進步.Let's do better together!
            posts - 102, comments - 43, trackbacks - 0, articles - 19

            微博短網址原理(ShortUrl)算法

            Posted on 2011-11-04 14:06 Shuffy 閱讀(1140) 評論(0)  編輯 收藏 引用 所屬分類: Java

            短網址一直都在微博上應用。例如騰訊微博的短網址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,這樣幾乎不會出現太大的重復。

            下面來看看程序部分:


            Java代碼
            public static string[] ShortUrl(string url) 

            //可以自定義生成MD5加密字符傳前的混合KEY 
            string key = "Leejor"; 
            //要使用生成URL的字符 
            string[] chars = new string[]{
            "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"
            };
            //對傳入網址進行MD5加密
            string hex = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(key + url, "md5"); 

            string[] resUrl = new string[4];
            for (int i = 0; i < 4; i++)

            //把加密字符按照8位一組16進制與0x3FFFFFFF進行位與運算
            int hexint = 0x3FFFFFFF & Convert.ToInt32("0x" + hex.Substring(i * 8, 8), 16); 
            string outChars = string.Empty;
            for (int j = 0; j < 6; j++)
            {
            //把得到的值與0x0000003D進行位與運算,取得字符數組chars索引 
            int index = 0x0000003D & hexint;
            //把取得的字符相加 
            outChars += chars[index]; 
            //每次循環按位右移5位
            hexint = hexint >> 5; 
            }
            //把字符串存入對應索引的輸出數組 
            resUrl[i] = outChars; 

             
            return resUrl; 
            }
            public static string[] ShortUrl(string url)
            {
            //可以自定義生成MD5加密字符傳前的混合KEY
            string key = "Leejor";
            //要使用生成URL的字符
            string[] chars = new string[]{
            "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"

            };
            //對傳入網址進行MD5加密
            string hex = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(key + url, "md5");

            string[] resUrl = new string[4];

            for (int i = 0; i < 4; i++)
            {
            //把加密字符按照8位一組16進制與0x3FFFFFFF進行位與運算
            int hexint = 0x3FFFFFFF & Convert.ToInt32("0x" + hex.Substring(i * 8, 8), 16);
            string outChars = string.Empty;
            for (int j = 0; j < 6; j++)
            {
            //把得到的值與0x0000003D進行位與運算,取得字符數組chars索引
            int index = 0x0000003D & hexint;
            //把取得的字符相加
            outChars += chars[index];
            //每次循環按位右移5位
            hexint = hexint >> 5;
            }
            //把字符串存入對應索引的輸出數組
            resUrl[i] = outChars;
            }

            return resUrl;
            }

            現在可以直接使用該方法,可以等到下面四組值

            ShortUrl(http://www.me3.cn")[0]; //得到值fAVfui

            ShortUrl("http://www.me3.cn")[1]; //得到值3ayQry

            ShortUrl("http://www.me3.cn")[2]; //得到值UZzyUr

            ShortUrl("http://www.me3.cn")[3]; //得到值36rQZn

            原文地址:http://haohaoker-163-com.iteye.com/blog/1094692

            日韩人妻无码精品久久免费一| 免费国产99久久久香蕉| 久久婷婷五月综合成人D啪| 久久久艹| 国产婷婷成人久久Av免费高清| 久久天堂电影网| 一本一本久久A久久综合精品| 国产美女久久久| 国产精品久久久久久久久久影院| 久久精品蜜芽亚洲国产AV| 久久久精品国产亚洲成人满18免费网站| 女人高潮久久久叫人喷水| 女人香蕉久久**毛片精品| 久久久噜噜噜久久中文字幕色伊伊 | 漂亮人妻被中出中文字幕久久 | 久久91精品国产91久久小草| 久久人人爽人爽人人爽av| 久久亚洲精品国产精品| 亚洲国产视频久久| 国产999精品久久久久久| 久久久久亚洲av无码专区| 日韩欧美亚洲国产精品字幕久久久| 97精品伊人久久大香线蕉app| 久久久久亚洲国产| 思思久久99热只有频精品66| 久久国产成人午夜AV影院| 99久久精品国产一区二区| 久久99国产精一区二区三区| 久久夜色精品国产噜噜麻豆| 久久精品亚洲AV久久久无码| 性做久久久久久久久老女人| 久久久免费观成人影院| 国产女人aaa级久久久级| 91精品观看91久久久久久| 69SEX久久精品国产麻豆| 久久亚洲精精品中文字幕| 亚洲AV日韩精品久久久久| 亚洲AV日韩AV天堂久久| 久久精品国产亚洲AV麻豆网站| 久久综合给久久狠狠97色| 国内精品久久久久影院日本|