1. 程式人生 > >我們為什麼要將長連結生成短連結?

我們為什麼要將長連結生成短連結?

微博限制字數為140字一條,那麼如果我們需要發一些連線上去,但是這個連線非常的長,以至於將近要佔用我們內容的一半篇幅,這肯定是不能被允許的,所以短網址應運而生了。

跳轉原理 :共生成4個短連結,任意一個都可以
         當我們生成短連結之後,只需要在表中(資料庫或者NoSql )儲存原始連結與短連結的對映關係即可。當我們訪問短連結時,只需要從對映關係中找到原始連結,即可跳轉到原始連結。

public class ShortUrlGenerator {  
  
    /** 
      * @param args 
      */  
    public static void main(String[] args) {  
   //共生成4個短連結,任意一個都可以
       String sLongUrl = "http://www.testapiphp.support.com?username=334234&password=123456" ; //長連結  
       String[] aResult = shortUrl (sLongUrl);  
       // 打印出結果  
       for ( int i = 0; i < aResult. length ; i++) {  
           System. out .println( "[" + i + "]:::" + aResult[i]);  
       }  
    }  
   
    public static String[] shortUrl(String url) {  
       // 可以自定義生成 MD5 加密字元傳前的混合 KEY  
       String key = "mengdelong" ;  
       // 要使用生成 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 sMD5EncryptResult = ( new CMyEncrypt()).md5(key + url);  
       String hex = sMD5EncryptResult;  
   
       String[] resUrl = new String[4];  
       for ( int i = 0; i < 4; i++) {  
   
           // 把加密字元按照 8 位一組 16 進位制與 0x3FFFFFFF 進行位與運算  
           String sTempSubString = hex.substring(i * 8, i * 8 + 8);  
   
           // 這裡需要使用 long 型來轉換,因為 Inteper .parseInt() 只能處理 31 位 , 首位為符號位 , 如果不用 long ,則會越界  
           long lHexLong = 0x3FFFFFFF & Long.parseLong (sTempSubString, 16);  
           String outChars = "" ;  
           for ( int j = 0; j < 6; j++) {  
              // 把得到的值與 0x0000003D 進行位與運算,取得字元陣列 chars 索引  
              long index = 0x0000003D & lHexLong;  
              // 把取得的字元相加  
              outChars += chars[( int ) index];  
              // 每次迴圈按位右移 5 位  
              lHexLong = lHexLong >> 5;  
           }  
           // 把字串存入對應索引的輸出陣列  
           resUrl[i] = outChars;  
       }  
       return resUrl;  
    }  
}