forum.bitel.ru
http://forum.bitel.ru/

ошибка скрипта
http://forum.bitel.ru/viewtopic.php?f=22&t=2145
Страница 1 из 1

Автор:  max [ 07 апр 2009, 16:10 ]
Заголовок сообщения:  ошибка скрипта

помогите пожалуйста разобраться с ошибкой в скрипте
Код:
KPP_PARAM_ID = 19;
 
paramId = event.getParamId();
value   = event.getValue();
 
print( "paramId=" + paramId + "; value=" + value );
 
if( paramId == KPP_PARAM_ID )
{
    if( value.length() < 9 )
    {
        event.setError( "Длина параметра меньше 9" );
        return;
    }
}

paramId = event.getParamId();
value = event.getValue();
//
print( "paramId=" + paramId + "; value=" + value );
//
int mult(String s, int[] c) {
   int len = s.length();
   if (len > c.length)
      len = c.length;
   int summ = 0;
   for (int j = 0; j < len; j++) {
      if (!Character.isDigit(s.charAt(j)))
         return -255;
      summ += c[j] * ((int) s.charAt(j) - (int) '0');
   }
   return summ;
}
 
boolean KPP(String kpp) {
   if (kpp == null)
      return false;
   if (kpp.length() == 9)
      return (char) ((int) '0' + mult(kpp, new int[] { 2, 4, 10, 3, 5, 9,
            4, 6, 8 }) % 11 % 10) == kpp.charAt(9);
   if (kpp.length() == 12)
      return ((char) ((int) '0' + mult(kpp, new int[] { 7, 2, 4, 10, 3,
            5, 9, 4, 6, 8 }) % 11 % 10) == kpp.charAt(10))
            && ((char) ((int) '0' + mult(kpp, new int[] { 3, 7, 2, 4,
                  10, 3, 5, 9, 4, 6, 8 }) % 11 % 10) == kpp.charAt(9));
   return false;
}
 
if( paramId == KPP_PARAM_ID )
{
   if( event.getValue().equals("") ) return;
 
   if( ! KPP(event.getValue()) )
   {
     event.setError("Не правильный КПП");
     return;
   }
}

однако при его исполнении вылезает вот такая ошибка:
Код:
Contract ИН-09-0017-В
GENERATE_TIME: 07.04.09 14:56:41
EXECUTION_STOP_TIME: 07.04.09 14:56:41
PROCESS_TIME: 16

OUT:
paramId=19; value=744801001
paramId=19; value=744801001


ERROR:


EXCEPTIONS:
Sourced file: inline evaluation of: ``KPP_PARAM_ID = 19;     paramId = event.getParamId();  value   = event.getValue() . . . '' : Method
Invocation kpp.charAtjava.lang.StringIndexOutOfBoundsException: String index out of range: 9
        at java.lang.String.charAt(String.java:687)
        at sun.reflect.GeneratedMethodAccessor132.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at bsh.Reflect.invokeOnMethod(Unknown Source)
        at bsh.Reflect.invokeObjectMethod(Unknown Source)
        at bsh.Name.invokeMethod(Unknown Source)
        at bsh.BSHMethodInvocation.eval(Unknown Source)
        at bsh.BSHPrimaryExpression.eval(Unknown Source)
        at bsh.BSHPrimaryExpression.eval(Unknown Source)
        at bsh.BSHBinaryExpression.eval(Unknown Source)
        at bsh.BSHReturnStatement.eval(Unknown Source)
        at bsh.BSHIfStatement.eval(Unknown Source)
        at bsh.BSHBlock.evalBlock(Unknown Source)
        at bsh.BSHBlock.eval(Unknown Source)
        at bsh.BshMethod.invokeImpl(Unknown Source)
        at bsh.BshMethod.invoke(Unknown Source)
        at bsh.BshMethod.invoke(Unknown Source)
        at bsh.Name.invokeLocalMethod(Unknown Source)
        at bsh.Name.invokeMethod(Unknown Source)
        at bsh.BSHMethodInvocation.eval(Unknown Source)
        at bsh.BSHPrimaryExpression.eval(Unknown Source)
        at bsh.BSHPrimaryExpression.eval(Unknown Source)
        at bsh.BSHUnaryExpression.eval(Unknown Source)
        at bsh.BSHIfStatement.evaluateCondition(Unknown Source)
        at bsh.BSHIfStatement.eval(Unknown Source)
        at bsh.BSHBlock.evalBlock(Unknown Source)
        at bsh.BSHBlock.eval(Unknown Source)
        at bsh.BSHBlock.eval(Unknown Source)
        at bsh.BSHIfStatement.eval(Unknown Source)
        at bsh.Interpreter.eval(Unknown Source)
        at bsh.Interpreter.eval(Unknown Source)
        at bsh.Interpreter.eval(Unknown Source)
        at bitel.billing.server.script.bean.ScriptMachine.runScript(ScriptMachine.java:158)
        at bitel.billing.server.script.bean.event.EventProcessor.processEvent(EventProcessor.java:248)
        at bitel.billing.server.contract.action.ActionUpdateParameterType1.doAction(ActionUpdateParameterType1.java:46)
        at bitel.billing.server.Executer.doModule(Executer.java:693)
        at bitel.billing.server.Executer.doPost(Executer.java:177)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at bitel.billing.server.filters.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:37)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
        at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:568)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
        at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
        at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
        at java.lang.Thread.run(Thread.java:619)


WARNINGS:

Автор:  Amir [ 07 апр 2009, 16:25 ]
Заголовок сообщения: 

Цитата:
Код:
if (kpp.length() == 9)
      return (char) ((int) '0' + mult(kpp, new int[] { 2, 4, 10, 3, 5, 9,
            4, 6, 8 }) % 11 % 10) == kpp.charAt(9);

Длина 9, т.е. последний символ - восьмой.

Автор:  max [ 08 апр 2009, 00:43 ]
Заголовок сообщения: 

Amir писал(а):
Цитата:
Код:
if (kpp.length() == 9)
      return (char) ((int) '0' + mult(kpp, new int[] { 2, 4, 10, 3, 5, 9,
            4, 6, 8 }) % 11 % 10) == kpp.charAt(9);

Длина 9, т.е. последний символ - восьмой.

ясно, поправьте тогда скрипт в викки так как брал его от туда!

Автор:  Администратор [ 08 апр 2009, 11:42 ]
Заголовок сообщения: 

Так поправьте сами. В каком виде он заработал в итоге?

Автор:  Amir [ 08 апр 2009, 15:22 ]
Заголовок сообщения: 

А там помоему только валидация инн и соответственно длина 10.

Автор:  max [ 09 апр 2009, 09:18 ]
Заголовок сообщения: 

Администратор писал(а):
Так поправьте сами. В каком виде он заработал в итоге?

вот в таком:
Код:
KPP_PARAM_ID = 19;
 
paramId = event.getParamId();
value   = event.getValue();
 
print( "paramId=" + paramId + "; value=" + value );
 
if( paramId == KPP_PARAM_ID )
{
    if( value.length() < 9 )
    {
        event.setError( "Длина параметра меньше 9" );
        return;
    }
}

paramId = event.getParamId();
value = event.getValue();
//
print( "paramId=" + paramId + "; value=" + value );
//
int mult(String s, int[] c) {
   int len = s.length();
   if (len > c.length)
      len = c.length;
   int summ = 0;
   for (int j = 0; j < len; j++) {
      if (!Character.isDigit(s.charAt(j)))
         return -255;
      summ += c[j] * ((int) s.charAt(j) - (int) '0');
   }
   return summ;
}
 
boolean KPP(String kpp) {
   if (kpp == null)
      return false;
   if (kpp.length() == 9)
      return (char) ((int) '0' + mult(kpp, new int[] { 2, 4, 10, 3, 5, 9,
            4, 6, 8 }) % 11 % 10) == kpp.charAt(9);
   if (kpp.length() == 12)
      return ((char) ((int) '0' + mult(kpp, new int[] { 7, 2, 4, 10, 3,
            5, 9, 4, 6, 8 }) % 11 % 10) == kpp.charAt(10))
            && ((char) ((int) '0' + mult(kpp, new int[] { 3, 7, 2, 4,
                  10, 3, 5, 9, 4, 6, 8 }) % 11 % 10) == kpp.charAt(8));
   return false;
}
 
if( paramId == KPP_PARAM_ID )
{
   if( event.getValue().equals("") ) return;
 
   if( ! KPP(event.getValue()) )
   {
     event.setError("Не правильный КПП");
     return;
   }
}

в викки попрвлю

Страница 1 из 1 Часовой пояс: UTC + 5 часов [ Летнее время ]
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/