ショートURL(ShortUrl)実装

43338 ワード

最近、私のプロジェクトの中で短いURL(ShortUrl)のアルゴリズムを使う必要があって、そこでネット上で検索して、C#のアルゴリズムがあることを発見して、.Netのアルゴリズムがあって、PHPのアルゴリズムがあって、Java版の短いURL(ShortUrl)のアルゴリズムが見つからないので、とても憂鬱です.Java版のショートサイト(ShortUrl)のアルゴリズムをどのように実現するかを求めているネットユーザーも少なくないことが分かった.いっそやらないで、ネット上で流行しているPHP版のショートサイト(ShortUrl)アルゴリズムを参考にしました.http://www.snippetit.com/2009/04/php-short-url-algorithm-implementation/ さらに自分の理解に基づいてJavaでこのショートURL(ShortUrl)のアルゴリズムを実現した.((^o^)/YES!私はすごい!)まずくだらないことを言って、他の人の招待状で見たので、主にみんなに短いウェブサイト(ShortUrl)を理解させます.現在、短いウェブサイトの応用はすでに全国の各微博で流行し始めた.例えばQQ微博のurl.cn、新郎のt.cnなど.私たちが新浪微博でウェブサイトを発表するとき、微博は自動的にウェブサイトを判別し、それを変換します.例えば:http://t.cn/hrYnr0.なぜこのようにするのか、理由はいくつかあると思います:1、微博制限の字数は140字1本で、もし私たちがいくつかの接続を送る必要があるならば、しかしこの接続はとても長くて、私たちの内容の半分の紙幅を占有しなければならなくて、これはきっと許されないので、短いウェブサイトは運に応じて生まれました.2、短いウェブサイトは私たちのプロジェクトでオープンレベルのURLをよく管理することができます.一部のウェブサイトは性、暴力、広告などの情報をカバーすることができ、このように私たちはユーザーの通報を通じて、この接続を完全に管理することができます.私たちのアプリケーションには現れません.同じURLのために暗号化アルゴリズムを通過した後、得られたアドレスは同じです.3、私たちは一連のウェブサイトに対して流量を行うことができて、クリックなどの統計をクリックして、大多数のユーザーの関心点を掘り起こして、このように私たちがプロジェクトの後続の仕事に対してもっと良い決定を下すのに役立ちます.実は以上の3点は個人の観点に属して、私の次の部分のプロジェクトの中で応用するため、理解して、以下はまず短いウェブサイトのマッピングアルゴリズムの理論(ネット上で見つけた資料)を見てみます:1長いウェブサイトをmd 5アルゴリズムで32ビットの署名列を生成して、4段に分けて、1段ごとに8文字;2この4段のループ処理に対して、各段の8文字を取り、16進文字列と0 x 3 fffffffffff(30ビット1)のビットと操作、30ビットを超える無視処理と見なす.③各セグメントで得られた30ビットを6セグメントに分け、5ビットの数字ごとにアルファベットのインデックスとして特定文字を取得し、順次6ビット文字列を取得する.④このようなmd 5文字列は4つの6ビット列を得ることができ、中のいずれかを取ってこの長いurlの短いurlアドレスとすることができる.簡単な理論では、得られたURLが唯一だとは限らないが、4組のURLを取り出すことができ、あまり繰り返されない.まず、JavaでどのようにMD 5で文字列を暗号化して32ビットの暗号化された文字列を得るかを理解してください.次のリンクは私がカプセル化したJava MD 5アルゴリズムです.http://www.sunchis.com/html/java/javaweb/2011/0418/308.html プログラムセクションを見てみましょう.

      
      
      
      
view plain    copy
  1. package basic; 
  2.  
  3. import util.Encript; 
  4.  
  5. public class ShortUrl { 
  6.     public static void main(String[] args) { 
  7.         String url = "http://www.sunchis.com"
  8.         for (String string : ShortText(url)) { 
  9.             print(string); 
  10.         } 
  11.     } 
  12.      
  13.     public static String[] ShortText(String string){ 
  14.         String key = "XuLiang";                 // MD5 KEY 
  15.         String[] chars = new String[]{          // URL  
  16.             "a","b","c","d","e","f","g","h"
  17.             "i","j","k","l","m","n","o","p"
  18.             "q","r","s","t","u","v","w","x"
  19.             "y","z","0","1","2","3","4","5"
  20.             "6","7","8","9","A","B","C","D"
  21.             "E","F","G","H","I","J","K","L"
  22.             "M","N","O","P","Q","R","S","T"
  23.             "U","V","W","X","Y","Z" 
  24.         }; 
  25.          
  26.         String hex = Encript.md5(key + string); 
  27.         int hexLen = hex.length(); 
  28.         int subHexLen = hexLen / 8
  29.         String[] ShortStr = new String[4]; 
  30.          
  31.         for (int i = 0; i < subHexLen; i++) { 
  32.             String outChars = ""
  33.             int j = i + 1
  34.             String subHex = hex.substring(i * 8, j * 8); 
  35.             long idx = Long.valueOf("3FFFFFFF"16) & Long.valueOf(subHex, 16); 
  36.              
  37.             for (int k = 0; k < 6; k++) { 
  38.                 int index = (int) (Long.valueOf("0000003D"16) & idx); 
  39.                 outChars += chars[index]; 
  40.                 idx = idx >> 5
  41.             } 
  42.             ShortStr[i] = outChars; 
  43.         } 
  44.          
  45.         return ShortStr; 
  46.     } 
  47.      
  48.     private static void print(Object messagr){ 
  49.         System.out.println(messagr); 
  50.     } 
でShortText(url)メソッドを直接使用できるようになりました.

      
      
      
      
view plain    copy
  1. ShortText("http://www.sunchis.com")[0];  // :Jzyqma 
  2. ShortText("http://www.sunchis.com")[1];  // :QBrMzm 
  3. ShortText("http://www.sunchis.com")[2];  // :bQreM3 
  4. ShortText("http://www.sunchis.com")[3];  // :VNBRna 
結果の4つの値のいずれかを選択すると、URL対応に生成された短いURLとして使用できます.