function encodePass($lv_pass){
    $lv_key1="54176382";
    $lv_key2="1e4s2dj6l38 5097vw.";
    $lv_key3="ab cdefghijklmn102p";
    $lv_pass1 = "        ";
    for ($lv_i = 1; $lv_i <= 8; $lv_i++){
          $lv_j = $lv_key1{$lv_i-1};
        $lv_pass1 = substr($lv_pass1,0,$lv_i-1).$lv_pass{$lv_j-1}.substr($lv_pass1,$lv_i-8,8-$lv_i);
     }
    $lv_pass = $lv_pass1;
    for ($lv_i = 1; $lv_i <= 8; $lv_i++){
           for ($lv_j = 1; $lv_j <= 19; $lv_j++){
               if ($lv_pass{$lv_i-1} == $lv_key2{$lv_j-1}){
                 $lv_pass1 = substr($lv_pass1,0,$lv_i-1).$lv_key3{$lv_j-1}.substr($lv_pass1,$lv_i-8,8-$lv_i);
            }
        }
    }
    return $lv_pass1;
}

解决方案 »

  1.   

    没测试String encodePass(String lv_pass){
      String lv_key1="54176382";
      String lv_key2="1e4s2dj6l38 5097vw.";
      String lv_key3="ab cdefghijklmn102p";
      String lv_pass1 = " ";
      for(int lv_i = 1; lv_i <= 8; lv_i++){
      lv_j = lv_key1.subString(lv_i-2,lv_i-1);
      lv_pass1 = lv_pass1.subString(0,lv_i-1)+lv_pass.subString(lv_j-2,lv_j-1)+lv_pass1.subString(lv_i-8,8-lv_i);
      }
      lv_pass = lv_pass1;
      for (int lv_i = 1; lv_i <= 8; lv_i++){
      for (int lv_j = 1; lv_j <= 19; lv_j++){
      if (lv_pass.subString(lv_i-2,lv_i-1) == lv_key2.subString(lv_j-2,lv_j-1)){
      lv_pass1 = lv_pass1.subString(0,lv_i-1)+lv_key3.subString(lv_j-2,lv_j-1)+lv_pass1.subString(lv_i-8,8-lv_i);
      }
      }
      }
      return lv_pass1;
    }
      

  2.   

    感谢楼上的热心回答,我对PHP还真是一窍不通
    这样的,我这边有3个问题
    1. 从i=1的时候,$lv_j = $lv_key1{$lv_i-1};这边$lv_j是不是5,如果PHP的下标也是从0开始的话;
    2. java对于string.substring(0,0)这种开头和结束的位置一样的截取方式是报错的;
    3. substr($lv_pass1,$lv_i-8,8-$lv_i)怎么理解,当i=1的时候,substr($lv_pass1,-7,7)怎么看谢谢
      

  3.   

    1、是的。PHP的下标也是从0开始的
    2、Java中 substring 参数好像是 起始位置 终止位置。好像也有 substr 吧
    3、substr 的参数 待截取的串 起始位置 长度
    substr($lv_pass1,-7,7) 返回 $lv_pass1 的倒数第7个字符开始的7个字符