power building 。php 我还在一点点的啃它到底算法。贴给你下
[PHP] 纯文本查看 复制代码 function uf_decode($input){
$input = strtolower($input);
if(strlen($input) < 3){
return "";
}
$key = "abcdef012wxyz345mnopqr6789ghijklstuv";
$li_lenstr = strlen($key);
$len_input = strlen($input);
$ls_beg = $input;
for($j = 1;$j<=$len_input;$j++){//< or <= 序列号每一个都要处理
$return_add = "";
$li_lenbeg = strlen($ls_beg);//初始值是序列号,后期会增加
$li_pos = pb_pos($key,mid($ls_beg,$li_lenbeg,1)); //mid(序列号_增加,序列号_增加_长度,1)
$li_off = pb_pos($key,mid($ls_beg,$li_lenbeg - 1,1));
if($li_pos == 0 || $li_off == 0){
return "";
}
$li_pos = $li_pos - $li_off;
if($li_pos < 1){
$li_pos = $li_pos + $li_lenstr;
}
$li_pos = $li_pos * 2;//2
if($li_pos > $li_lenstr){
$li_pos = $li_pos - $li_lenstr;
}
$ls_beg = mid($key,$li_pos,1) . $ls_beg;//b.input
$li_lenbeg = strlen($ls_beg);//11
for($i = $li_lenbeg;$i<=2;$i--){
$li_pos = pb_pos($key,mid($ls_beg,$i,1));
$li_off = pb_pos($key,mid($ls_beg,$i - 1,1));
if($li_pos == 0 || $li_off == 0){
return "";
}
$li_pos = $li_pos - $li_off;
if($li_pos < 1){
$li_pos = $li_pos + $li_lenstr;
}
$return_add = mid($key,$li_pos,1) . $return_add;
}
$return_add = right($return_add,1) . left($return_add,strlen($return_add) - 1);
$ls_beg = $return_add;
}
return $ls_end;
}
function pb_pos($str,$find){
$r = strpos($str,$find);
if($r!==false){
return ($r+1);
}else{
return 0;
}
}
function mid($str,$start,$length){
return substr($str,$start-1,$length);
}
function left($str,$len){
return substr($str,0,$len);
}
function right($str,$len){
return substr($str,0-$len);
}
exit;
?> |