最近遇到了34进制转化为10进制的问题,记录下。
将34进制的字符串'H2V'转换成为10进制数,进而转换为日期。
百度了下34进制的资料,记录如下:
34进制指以0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F、G、H、J、K、L、M、N、P、Q、R、S、T、U、V、W、X、Y、Z为基数做累加。
0-9和A-Z共36个数字加上英文字母去掉 'I'、'O'这两个容易和1、0混淆的字母后共34个基数。主要应用在容易造成数字和字母混淆的特殊领域,比如汽车牌照数字,方便识别管理。
php函数base_convert
function getDate1($str)
{
$ts_day = 24 * 60 * 60;
$day_num = intval(base_convert($str, 34, 10));
return date('Ymd', $day_num * $ts_day);
}
$str = 'H2V';
echo '<pre>';
var_dump($str, getDate1($str)); //"20240129"
得到的结果和实际的日期并不相符,应该是base_convert并未根据实际去除 'I'、'O'这两个字母后再计算
自定义函数
function getDate2($str)
{
$base = [
'0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'J', 'K', 'L', 'M',
'N', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'
];
$sum = 0;
$len = strlen($str);
for ($i = 0; $i < $len; $i++) {
$index = array_search($str[$i], $base);
$sum += pow(34, $len - $i - 1) * $index;
}
$ts_day = 24 * 60 * 60;
return date('Ymd', $sum * $ts_day);
}
$str = 'H2V';
echo '<pre>';
var_dump($str, getDate2($str));//"20240127"
得到的结果和实际的日期相符
标签:10,进制,34,base,str,day From: https://www.cnblogs.com/caroline2016/p/17999073