如题,初步看来    123 会被转换成 950949948
            abc -> 902901900
            abc?123 -> 902901900936950949948希望高手解答。

解决方案 »

  1.   


    //很简单
    $s = '?';
    echo '9' . strrev(ord($s));
      

  2.   

    字符串部分的加密规则: $s .= '9' . str_pad(abs(ord($str[$i]) - 1), 2, '0', STR_PAD_LEFT);//从后向前加密
    数字部分的加密规则: $s .= '9' . str_pad(abs(ord($str[$i]) - 1), 2, '0', STR_PAD_LEFT);//从前向后加密
      

  3.   

    那你在给出一组结果
    明文 xyz
    明文 34567
      

  4.   

    xyz   ->  879878877
    34567 ->  948947946945944
      

  5.   


    /*** 编码 ***/
    function encode($s) {
      preg_match_all('/([a-z]+)|([0-9]+)|([^0-9a-z]+)/i', $s, $t);
      foreach($t[0] as $v) {
        foreach(str_split($v, 1) as $c)
          $r[] = 999 - ord($c);
      }
      return implode('', $r);
    }/*** 解码 ***/
    function decode($s) {
      foreach(str_split($s, 3) as $v)
        $r .= chr(999 - $v);
      return $r;
    }
    请自行验证多组数据
    如有问题请及时提出
      

  6.   

    请问   xuzuning   这位兄弟,字母我测试好像没什么问题,中文怎么处理呢?
      

  7.   

    黯鼢  ->  1008100910081008
    侖侘  ->  1126100911261008
      

  8.   

    函数修改成这样就可以了
    function encode($s) {
      preg_match_all('/([a-z]+)|([0-9]+)|([^0-9a-z]+)/i', $s, $t);
      foreach($t[0] as $v) {
        foreach(str_split($v, 1) as $c)
          $r[] = (ord($c)>127 ? 1255 : 999) - ord($c);
      }
      return implode('', $r);
    }function decode($s) {
      preg_match_all('/1?\d{3}/', $s, $t);
      foreach($t[0] as $v)
        $r .= chr(($v{0}==1 ? 1255 : 999) - $v);
      return $r;
    }
    注意:编码和解码需要在同一种编码环境中进行