base62_encode|base64_decode 的P
admin
2023-01-28 05:10:18
0

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

 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";
}


相关内容

热门资讯

“镐山”之后美再威胁袭伊基础设... 截至7月22日,美军已连续11晚对伊朗发动袭击,伊方对美中东地区军事基地的反击也未停止。与此同时,美...
美国“痛失”杨植麟,这是历史性... 杨植麟的月之暗面创造了Kimi K3,轰动整个世界。他是近年来第一个放弃了美国机会、回中国创业,并且...
铭显光电取得LED显示屏加工夹... 国家知识产权局信息显示,上海铭显光电科技有限公司取得一项名为“一种LED显示屏加工夹具”的专利,授权...
大盘承压依旧登顶,vivo拿下... 7月22日消息,市场调研机构Omdia发布2026年第二季度印度智能市场报告,数据显示本季度印度手机...
白宫发布《科学:新的黄金时代》... 据白宫7月21日消息,白宫科技政策办公室、管理与预算办公室联合发布《科学:新的黄金时代》报告。本次备...
民营商业火箭首次从长三角东海海... 北京时间7月22日10时54分,我国太原卫星发射中心在上海东部海域使用引力一号遥四运载火箭,将搭载的...
美威胁袭伊基础设施,伊朗军方:... △当地时间21日,船只在霍尔木兹海峡航行伊朗武装部队哈塔姆安比亚中央总部当地时间22日发布声明称,美...
扑翼机器人问世:像潜水鸟一样在... 潜鸟、海鸥、海鹦和海燕,是自然界中约100种既能飞行又能游泳的鸟类。这些潜水鸟能够俯冲入水追逐猎物,...
当科学家走进西部脑谷:这里有望... 7月22日,2026天府科学家创新发展大会暨成都科产融合对接活动锦江经开区脑机接口专场在锦江区成功举...
女子身份证丢失后名下出现“吸毒... 四川籍的庞女士定居浙江宁波多年,她怎么也没想到,因丢失身份证一事,竟让她陷入长达7年“自证清白”的困...