十六进制转十进制
十进制转十六进制
<?php
class Base36 {
private static $map = ['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'];
/**
* 10进制转36进制
* @param int $n 十进制数
* @param boolean $upper 是否输出大写
* @return string 36进制字符串
*/
public static function encode ($n, $upper = true) {
$n = intval($n);
$map = self::$map;
$divide = count($map);
$chars = [];
while ($n > 0) {
$d = $n % $divide;
$n = ($n - $d) / $divide;
$chars[] = $map[$d];
}
$rel = join('', array_reverse($chars));
return $upper ? strtoupper($rel) : $rel;
}
/**
* 36进制转10进制
* @param string
*/
public static function decode (String $code) {
$char = strtolower($code);
$map = self::$map;
$c = count($map);
$len = strlen($char);
$sum = 0;
for($i = 0; $i < $len; $i++) {
$index = array_search($char[$i], $map);
$sum += $index * pow($c, $len - $i - 1);
}
return $sum;
}
}
示例
$r1 = Base36::encode(10001);
$r2 = Base36::decode($r1);
var_dump($r1, $r2);
// string(3) "7PT"
//int(10001)