base62_encode|base64_decode 的P
更新:HHH   时间:2023-1-7


完全参照Java 改写了一版本PHP,希望能提供方便。

<?php

Class Base62
{
	private static  $encodes = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
	/*
public static StringBuffer encodeBase62(byte[] data) {
    StringBuffer sb = new StringBuffer(data.length * 2);
    int pos = 0, val = 0;
    for (int i = 0; i < data.length; i++) {
        val = (val << 8) | (data[i] & 0xFF);
        pos += 8;
        while (pos > 5) {
            char c = encodes[val >> (pos -= 6)];
            sb.append(
            c == 'i' ? "ia" : (c == '+' ? "ib" :( c == '/' ? "ic" : c)));
            val &= ((1 << pos) - 1);
        }
    }
    if (pos > 0) {
        char c = encodes[val << (6 - pos)];
        sb.append(
           c == 'i' ? "ia" : (c == '+' ? "ib" :( c == '/' ? "ic" : c)));
    }
    return sb;
}
  */
	public static function base62_encode($data)
	{
		$sb = '';
		$len = strlen($data);
		$pos = $val = 0;
		for($i= 0; $i < $len; $i++){
			$tv = substr($data, $i, 1);
			$val = ($val << 8) | (ord($tv) & 0xFF);
			$pos += 8;
			while($pos > 5){
				$c = substr(self::$encodes, $val >> ($pos -= 6), 1);
				$sb .= $c == 'i' ? "ia" : (($c == '+') ? "ib" : (($c == '/') ? 'ic' : $c));
				$val &= ((1<<$pos) -1);
			}
		}
		if($pos > 0){
			$c = substr(self::$encodes, $val << (6 - $pos), 1);
			$sb .= ($c == 'i') ? "ia" : (($c == '+') ? "ib" : (($c == '/') ? 'ic' : $c));
		}
		return $sb;
	}

	/*
public static byte[] decodeBase62(char[] data) {
    ByteArrayOutputStream baos = new ByteArrayOutputStream(data.length);
    int pos = 0, val = 0;
    for (int i = 0; i < data.length; i++) {
        char c = data[i];
        if (c == 'i') {
            c = data[++i];
            c =  c == 'a' ? 'i' :  (c == 'b' ? '+' :  (c == 'c' ? '/' : data[--i]));
        }
        val = (val << 6) | decodes[c];
        pos += 6;
        while (pos > 7) {
            baos.write(val >> (pos -= 8));
            val &= ((1 << pos) - 1);
        }
    }
    return baos.toByteArray();
}
	*/

	public static function base62_decode($data)
	{
		$baos = '';
		$pos = $val = 0;
		$len = strlen($data);
		for($i = 0; $i < $len; $i++){
			$c = substr($data, $i, 1);
			if($c == 'i'){
				$c = substr($data, ++$i, 1);
				$c = ($c == 'a') ? 'i' : ($c == 'b' ? '+' : ($c == 'c' ? '/' : substr($data, --$i, 1)));
			}
			$val = ($val << 6) | strpos(self::$encodes, $c);
			$pos += 6;
			while($pos > 7){
				$tv = ($val >> ($pos -= 8));
				//var_dump($tv);
				$baos .= chr($tv);
				$val &= ((1 << $pos) - 1);
			}
		}

		return $baos;
	}
}

foreach([1,2,3,'a','b', 'c', 'addddd', '111', 'fkdskfjdsljflsdjfljsaldkjflaskjfldskjlfkjdslkfjladskjfldsk'] as $v){
	var_dump($v);
	$b = Base62::base62_encode($v);
	var_dump($b);
	var_dump(base64_encode($v));
	var_dump(Base62::base62_decode($b));
	echo "----------------------\n";
}


返回web开发教程...