长链接转短链接原理

长链接转短链接代码:

    <?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

阅读 2k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题