>백엔드 개발 >PHP 튜토리얼 >웨이보 짧은 링크 알고리즘 PHP 버전_PHP 튜토리얼

웨이보 짧은 링크 알고리즘 PHP 버전_PHP 튜토리얼

WBOY
WBOY원래의
2016-07-22 09:03:081155검색

아이디어:


1) 긴 URL md5에서 32비트 서명 문자열을 생성하고, 4개의 세그먼트로 나누어지며, 각 세그먼트는 8바이트입니다.

2) 이러한 4개 루프 처리 세그먼트의 경우 8바이트를 가져와서 16진수 문자열로 처리하고 0x3ffffff(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;

$출력 = 배열();

for ($i = 0; $i < $subHexLen; $i ) {

$subHex = 하위 문자열($hex, $i * 8, 8)

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

$out = '';

for ($j = 0; $j < 6; $j ) {

$val = 0x0000001F & $int;

$out .= $base32[$val];

$int = $int >>

}

$output[] = $out;

}

$출력을 반환합니다.

}

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


var_dump($urls);


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

www.bkjia.com

http: //www.bkjia.com/PHPjc/371805.htmlTechArticle아이디어: 1) 긴 URL md5에서 32비트 서명 문자열을 생성하고 각 세그먼트를 4개의 세그먼트로 나눕니다. 8개의 문자가 있습니다. 섹션 2) 이 4개의 세그먼트를 루프로 처리하고, 8바이트를 취하고, 16진수 문자열과 0x3fffffff(30비트 1)로 처리하고, 작동합니다...
성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.