아이디어:
1) 긴 URL md5에서 32비트 서명 문자열을 생성하고, 4개의 세그먼트로 나누어지며, 각 세그먼트는 8바이트입니다.
2) 이러한 4개 루프 처리 세그먼트의 경우 8바이트를 가져와서 16진수 문자열로 처리하고 0x3ffffff(30비트 1)로 작동합니다. 즉, 30비트를 초과하는 처리는 무시합니다.
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');
www.bkjia.com