ホームページ >バックエンド開発 >PHPチュートリアル >WeiboショートリンクアルゴリズムPHPバージョン_PHPチュートリアル

WeiboショートリンクアルゴリズムPHPバージョン_PHPチュートリアル

WBOY
WBOYオリジナル
2016-07-22 09:03:081158ブラウズ

アイデア:


1) 長い URL md5 から 32 ビットの署名文字列を生成し、4 つのセグメントに分割します。各セグメントは 8 バイトです。

2) これら 4 つのループ処理セグメントについては、8 バイトを 16 進文字列として扱い、0x3fffffff (30 ビット 1) で演算します。つまり、30 ビットを超える処理を無視します。

3) これらの 30 桁は 6 つのセグメントに分割され、各 5 桁の数字が特定の文字を取得するためのアルファベットのインデックスとして使用され、6 桁の文字列が順番に取得されます。


4) 合計 md5 文字列は 4 つの 6 桁の文字列を取得でき、それらのいずれかをこの長い URL の短い URL アドレスとして使用できます。

以下は
PHP

コードです:


function shorturl($url='', $prefix='', $suffix='') {

$base32 = 配列 (

'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');

$hex = md5($prefix.$url.$suffix);


$hexLen = strlen($hex);


$subHexLen = $hexLen / 8;


$output = array();


for ($i = 0; $i


$subHex = substr ($hex, $i * 8, 8);

$int = 0x3FFFFFFF & (1 * ('0x'.$subHex));

$out = '';

for ($j = 0; $j

$val = 0x0000001F & $int;

$out .= $base32[$val];


$int = $int >

;

}


$output[] = $out;


}


$output を返します;


}


$urls = shorturl('http://www.php100.com');


var_dump($urls);


http://www.bkjia.com/PHPjc/371805.html
www.bkjia.com

tru​​e
http://www.bkjia.com/PHPjc/371805.html

技術記事アイデア: 1) 長い URL md5 から 32 ビットの署名文字列を生成し、4 つのセグメントに分割します。各セグメントは 8 バイトです。2) これら 4 つのセグメントをループで処理し、8 バイトを取得し、16 進文字列として扱います。 0x3fffffff (30 ビット 1) と演算...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。