溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

base62_encode|base64_decode 的P

發(fā)布時(shí)間:2020-07-18 18:39:35 來(lái)源:網(wǎng)絡(luò) 閱讀:355 作者:dfwasds 欄目:web開(kāi)發(fā)

完全參照J(rèn)ava 改寫(xiě)了一版本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";
}


向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI