长链接转短链接代码:
<?php
function short_url($input = '', $salt = '') {
$base62 = array ('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' );
$hex = md5($input . $salt);
$hex_length = strlen($hex);
$sub_hex_length = $hex_length / 8;
$output = array();
for ($i = 0; $i < $sub_hex_length; $i++) {
$sub_hex = substr($hex, $i * 8, 8);
$int = 0x3FFFFFFF & (1 * ('0x' . $sub_hex));
$out = '';
for ($j = 0; $j < 5; $j++) {
$val = 0x0000003F & $int;
$val = $val % 62;
$out .= $base62[$val];
$int = $int >> 6;
}
$output[] = $out;
}
$in = 0x3 & (1 * ('0x'.substr($hex, 0, 1)));
return $output[$in];
}
为什么在第二个 for 循环中会使用位运算?并且是 0x0000003F
。