マイクロブログURLショートアドレスC#アルゴリズム
3039 ワード
先日、新浪微博のアプリを作っていて、アプリテストの内容を新浪微博に投稿したところ、アプリテストのリンク先がhttp://t.cn/xxxxxxになっていました. ,リンクをクリックしてアプリケーションのテストアドレスにジャンプし、「何が起こっているのか?」と考えた.
もともと私达が微博を出す时字数の制限があって、もし発表する微博の内容はウェブサイトを含んで、ウェブサイトは一定の长さを占めて、これは発表内容の字数に制限があって、私は新浪微博がもっと良いユーザーの体験のためにこの问题を解决する方法を探し出すのは元のウェブサイトをアルゴリズムによって短くなることだと思います.以下はネット上で資料を調べた[短いウェブサイトマッピングアルゴリズムの理論]:
(1)、長いアドレスをMD 5に基づいて32ビットの署名列を生成し、セグメントごとに8バイトである.
(2)、この4つのループ処理に対して、8バイトを取り、16進列と0 x 3 fffffffff(30ビット1)と操作、すなわち30ビットを超える無視処理と見なす.
(3)、この30ビットを6段に分け、5ビットの数字ごとにアルファベットのインデックスとして特定文字を取得し、順次6ビット文字列を取得する.
(4)、総md 5列は4個の6ビット列を得ることができる.中のいずれかを取ると、この長いurlの短いurlアドレスとすることができます.
この方法を使用すると、4つの異なるリンクアドレスが得られます. 例えば、ShortUrl("URL")[0]、ShortUrl("URL")[1]、ShortUrl("URL")[2]、ShortUrl("URL")[3].
以上のアルゴリズムおよびコードはいずれもネットワーク資料に由来する.
上には2つの問題があいまいなのは、進数変換とビット演算[使ったことがない].
もともと私达が微博を出す时字数の制限があって、もし発表する微博の内容はウェブサイトを含んで、ウェブサイトは一定の长さを占めて、これは発表内容の字数に制限があって、私は新浪微博がもっと良いユーザーの体験のためにこの问题を解决する方法を探し出すのは元のウェブサイトをアルゴリズムによって短くなることだと思います.以下はネット上で資料を調べた[短いウェブサイトマッピングアルゴリズムの理論]:
(1)、長いアドレスをMD 5に基づいて32ビットの署名列を生成し、セグメントごとに8バイトである.
(2)、この4つのループ処理に対して、8バイトを取り、16進列と0 x 3 fffffffff(30ビット1)と操作、すなわち30ビットを超える無視処理と見なす.
(3)、この30ビットを6段に分け、5ビットの数字ごとにアルファベットのインデックスとして特定文字を取得し、順次6ビット文字列を取得する.
(4)、総md 5列は4個の6ビット列を得ることができる.中のいずれかを取ると、この長いurlの短いurlアドレスとすることができます.
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;
}
この方法を使用すると、4つの異なるリンクアドレスが得られます. 例えば、ShortUrl("URL")[0]、ShortUrl("URL")[1]、ShortUrl("URL")[2]、ShortUrl("URL")[3].
以上のアルゴリズムおよびコードはいずれもネットワーク資料に由来する.
上には2つの問題があいまいなのは、進数変換とビット演算[使ったことがない].