题目:
老师让小明抄写一段话,结果粗心的小明把部分数字抄成了字母,还因为强迫症把所有字母都换成大写。你能帮小明恢复并解开答案吗:QWIHBLGZZXJSXZNVBZW
根据题目描述,可知 字符串原来是字母大小写+数字的。
而数字和字母相似的有 I(i)=>1、L(l)=>1、G(g)=>9、Z(z)=>2、S(s)=>5。
<?php
$list=[];
function fun($str,$index=0){
if($index==strlen($str)){
global $list;
$ret=base64_decode($str);
$list[]=$ret;
return false;
}
$head=substr($str,0,$index);
$mid=substr($str,$index,1);
$end=substr($str,$index+1,strlen($str)-$index);
$words=getWord($mid);
foreach ($words as $key=>$v){
$newStr=$head.$v;
$ret=base64_decode($newStr);
if(!preg_match('/[^a-zA-Z\d\_\-]/is',$ret)){
fun($newStr.$end,$index+1);
}
}
}
function getWord($c){
$word=["I"=>1, 'L'=>1, 'G'=>9, 'Z'=>2, 'S'=>5];
$arr=[$c,strtolower($c)];
if(isset($word[$c])){
$arr[]=$word[$c];
}
return $arr;
}
$str="QWIHBLGZZXJSXZNVBZW";
fun($str);
var_dump($list);
?>
共跑出720条字符串。
搜索Aman开头的字符串(因为作者昵称为Aman)找到最符合的一条字符串