code的格式是:"M1234-12345-12345-12345-12345-12345-12345";
    
    public static String calc(String code)
    {
     if(code.length() != 41 || code.indexOf("-") != 5)
     return "";
    
        StringBuffer stringbuffer = new StringBuffer();
        
        for(int i = 0; i < s.length(); i++)
        {
            char c = s.charAt(i);
            if(c != '-')
                stringbuffer.append(c);
        }
        
        s = stringbuffer.toString();
        stringbuffer.setLength(0);
        stringbuffer.append(s.substring(0, 2));
        int j = 0;
        j += s.charAt(0);
        j += s.charAt(1);
        int k = Integer.parseInt(s.substring(s.length() - 3));
        for(int l = 2; l < s.length() - 3; l++)
        {
            char c1 = s.charAt(l);
            int i1 = Integer.parseInt("" + c1);
            int j1 = l;
            j1 = (j1 * j1 - 3) + k;
            for(i1 -= j1; i1 < 0; i1 += 10);
            j += i1 + 48;
            stringbuffer.append("" + i1);
        }        String s1 = "" + j * 7;
        if(s1.substring(s1.length() - 3).equals(s.substring(s.length() - 3)))
            return stringbuffer.toString();
        else
            return "";
    }

解决方案 »

  1.   

    sorry,code 改成 spublic  static  String  calc(String  code)  
           {  
                       if(code.length()!=  41&brvbar;&brvbar;code.indexOf("-")!=5)
                                   return  "";
             
                   StringBuffer  stringbuffer  =  new  StringBuffer();  
                     
                   for(int  i  =  0;  i  <  s.length();  i++)  
                   {  
                           char  c  =  s.charAt(i);  
                           if(c  !=  '-')  
                                   stringbuffer.append(c);  
                   }  
                     
                   s  =  stringbuffer.toString();  
                   stringbuffer.setLength(0);  
                   stringbuffer.append(s.substring(0,  2));  
                   int  j  =  0;  
                   j  +=  s.charAt(0);  
                   j  +=  s.charAt(1);  
                   int  k  =  Integer.parseInt(s.substring(s.length()  -  3));  
                   for(int  l  =  2;  l  <  s.length()  -  3;  l++)  
                   {  
                           char  c1  =  s.charAt(l);  
                           int  i1  =  Integer.parseInt(""  +  c1);  
                           int  j1  =  l;  
                           j1  =  (j1  *  j1  -  3)  +  k;  
                           for(i1  -=  j1;  i1  <  0;  i1  +=  10);  
                           j  +=  i1  +  48;  
                           stringbuffer.append(""  +  i1);  
                   }  
     
                   String  s1  =  ""  +  j  *  7;  
                   if(s1.substring(s1.length()  -  3).equals(s.substring(s.length()  -  3)))  
                           return  stringbuffer.toString();  
                   else  
                           return  "";  
    }
      

  2.   

    代码 无法正确的运行,请确认你贴的代码经过调试,并且出现正确的结果。
    if(s1.substring(s1.length()  -  3).equals(s.substring(s.length()  -  3)))  
    其中 s1的值和s的值至关重要,可不可逆取决于能不能s1的值是否可以推算出来。
    因为
       for(i1  -=  j1;  i1  <  0;  i1  +=  10);  
                          j  +=  i1  +  48;  
    相当于作了求模运算,已经有信息丢失。
    丢失的那部分信息在存放在j中,并且加入了j1作为影响因素,请确定你的代码是正确的,并可运行,才好分析,不然会浪费时间。