2014-02-10 2 views
-1

У меня есть этот код в java, чтобы проверить номер банковского счета, что я пытаюсь сделать, это преобразовать его в цель-c, но я думаю, что мой код isn ' т рабочий вознамерился, вот код:Функция трансформирования java (подтвердить номер банковского счета) объекту c

JAVA 1:

public boolean isValid(final String accountCnumber, 
     final ConstraintValidatorContext constraintValidatorContext) { 
    if ((accountCnumber == null) && optional) { 
     return true; 
    } 
    else { 
     if (accountCnumber == null) { 
      return false; 
     } 
     else { 
      boolean result; 
      if (accountCnumber.length() == 12) { 
       final String auxAccountNumber = accountCnumber.substring(3,5)+ accountCnumber.substring(0, 3) + accountCnumber.substring(5, 12); 
       Integer principalCounter = 0; 
       Integer counter = 0; 
       for (int i = 0; i < auxAccountNumber.length() - 1; i++) { 

        principalCounter = checkData(auxAccountNumber, 
          principalCounter, i); 

       } 

       final Integer cont = (principalCounter + 10) * 10; 
       counter = cont - principalCounter; 
       final String lastAux = counter.toString().substring(counter.toString().length() - 1); 
       final String last = accountCnumber.substring(11); 

       result = lastAux.equals(last); 
      } 
      else { 
       result = false; 
      } 
      return result; 
     } 
    } 
} 

Моя цель-с Покушение 1: (Я думаю, что ошибка с прохождением от .substring к NSRange)

-(BOOL)accountValidation: (NSString *)accountCnumber 
{ 

    if ([accountCnumber isEqualToString:@""] || accountCnumber == nil) { 
     return false; 
    }else{ 
     Boolean result; 
     if (accountCnumber.length == 12) { 

      /* 
      000200041901 
      */ 

      NSString *auxAccountNumber = @""; 

      NSRange range1 = NSMakeRange(3, 2); //20 
      NSRange range2 = NSMakeRange(0, 3); //000 
      NSRange range3 = NSMakeRange(5, 7); //0041901 

      NSString *subString1 = [accountCnumber substringWithRange:range1]; 
      NSString *subString2 = [accountCnumber substringWithRange:range2]; 
      NSString *subString3 = [accountCnumber substringWithRange:range3]; 

      NSLog(@"subString1 20=%@",subString1); 
      NSLog(@"subString2 000=%@",subString2); 
      NSLog(@"subString3 0041901=%@",subString3); 

      auxAccountNumber = [NSString stringWithFormat:@"%@%@%@",subString1,subString2,subString3]; 

      NSLog(@"auxAccountNumber = %@",auxAccountNumber); 

      int principalCounter = 0; 
      int counter = 0; 

      for (int i = 0; i < auxAccountNumber.length - 1; i++) { 

       //principalCounter = checkData(auxAccountNumber,principalCounter, i); 

       principalCounter = [self checkData:auxAccountNumber p:principalCounter counter:i]; 

      } 

      int cont = (principalCounter + 10) * 10; 
      counter = cont - principalCounter; 

      NSString *strFromInt = [NSString stringWithFormat:@"%d",counter]; 

      NSString *lastAux = [strFromInt substringFromIndex:[strFromInt length]-1]; 

      NSString *last = [accountCnumber substringFromIndex:11]; 

      //result = lastAux.equals(last); 

      if ([lastAux isEqualToString:last]) { 
       result = true; 
      }else{ 
       result = false; 
      } 

     } 
     else { 
      result = false; 
     } 
     return result; 
    } 
} 

JAVA 2:

private Integer checkData(final String auxAccountNumber, final Integer pCounter, final int i) { 
    Integer principalCounter = pCounter; 
    Integer counter = 0; 
    Integer aux; 
    if (i % 2 == 0) { 
     counter = Integer.parseInt(Character.toString(auxAccountNumber.charAt(i))) * 2; 
     if (counter >= 10) { 
      counter = counter - 9; 
     } 
     principalCounter = principalCounter + counter; 
    } 
    else { 
     aux = Integer.parseInt(Character.toString(auxAccountNumber.charAt(i))); 
     principalCounter = principalCounter + aux; 
    } 
    return principalCounter; 
} 

Моя цель-с Покушение:

-(int)checkData:(NSString *)auxAccountNumber p:(int)pCounter counter:(int)i 
{ 
    int principalCounter = pCounter; 
    int counter = 0; 
    int aux=0; 
    if (i % 2 == 0) { 
     NSString *s = auxAccountNumber; 
     const char *c = [s UTF8String]; 

     counter = c[i] * 2; 

     if (counter >= 10) { 
      counter = counter - 9; 
     } 
     principalCounter = principalCounter + counter; 

    }else { 
     NSString *s = auxAccountNumber; 
     const char *c = [s UTF8String]; 
     counter = c[i] * 2; 
     principalCounter = principalCounter + aux; 
    } 
    return principalCounter; 

} 

Извините за длинный пост, но я на самом деле это нужно :)

EDIT У меня есть эти действительные номера банковских счетов для тестирования @ «000200041901» и @ «001200144174» результат метода «accountValidation» должен возвращать значение true, но проблема в том, что он всегда возвращает false.

+0

Это звучит не по теме для SO. Может быть, попробуйте здесь: http://codereview.stackexchange.com/ –

+5

Вы _think_ ваш код не работает должным образом? Тогда как мы должны знать? Проведите некоторые тесты, а затем вернитесь к нам, когда у вас есть конкретный вопрос. – Keppil

+0

Извините, мой плохой для неопределенного вопроса, я отредактировал его для уточнения. – Bruno

ответ

1

Ниже приведен пример второго способа переписаны с небольшим количеством лучшего именованием и устранением избыточности:

- (int)checkDataAuxAccountNumber:(NSString *)auxAccountNumber pCounter:(int)pCounter digitIndex:(int)digitIndex { 
    NSString *digitString = [auxAccountNumber substringWithRange:NSMakeRange(digitIndex, 1)]; 
    int digit = [digitString intValue]; 

    if (digitIndex % 2 == 0) { 
     digit *= 2; 
     if (digit >= 10) { 
      digit -= 9; 
     } 
    } 

    return pCounter + digit; 
} 

Преобразовать первый метод аналогичным образом.
Затем создайте тестовый код для кода Java и Objective-C.

Смежные вопросы