PHP 10进制转62进制
阅读 (1302) 2018-07-07 11:21:02
十进制数转换成62进制与62进制数转换成十进制数,应用场景,将手机号转码缩短位数存储
先解释一下,为什么会出现这种“奇怪的”进制,其实是一种缩短原文字符长度的算法,比如应用到网页短地址中或者将手机号缩短存储等等。
62是由0-9,a-z,A-Z: 10+26+26 == 62,所以缩短的字符串最终只会出现这些字符
/**
* 十进制数转换成62进制
*
* @param integer $num
* @return string
*/
function from10_to62($num) {
$to = 62;
$dict = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$ret = '';
do {
$ret = $dict[bcmod($num, $to)] . $ret;
$num = bcdiv($num, $to);
} while ($num > 0);
return $ret;
}
/**
* 62进制数转换成十进制数
*
* @param string $num
* @return string
*/
function from62_to10($num) {
$from = 62;
$num = strval($num);
$dict = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$len = strlen($num);
$dec = 0;
for($i = 0; $i < $len; $i++) {
$pos = strpos($dict, $num[$i]);
$dec = bcadd(bcmul(bcpow($from, $len - $i - 1), $pos), $dec);
}
return $dec;
}
例如有些业务需要将手机号码缩短长度,就可以把手机号转成62进制
// 手机号转进制后缩短长度
echo "get_char:".from10_to62(150888888888)."<br>";
// 把62进制数转回手机号
echo "get_num:".from62_to10('2EHwoQg')."<br>";
更新于:2020-07-22 10:47:46