34进制转化为10进制
最近遇到了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)
{
try {
$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);
if ($index === false) throw new Exception('error');
$sum += pow(34, $len - $i - 1) * $index;
}
$ts_day = 24 * 60 * 60;
return date('Ymd', $sum * $ts_day);
} catch (Exception $e) {
return 0;
}
}
$str = 'H2V';
echo '<pre>';
var_dump($str, getDate2($str));//"20240127"
得到的结果和实际的日期相符
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix