У меня есть этот код в 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.
Это звучит не по теме для SO. Может быть, попробуйте здесь: http://codereview.stackexchange.com/ –
Вы _think_ ваш код не работает должным образом? Тогда как мы должны знать? Проведите некоторые тесты, а затем вернитесь к нам, когда у вас есть конкретный вопрос. – Keppil
Извините, мой плохой для неопределенного вопроса, я отредактировал его для уточнения. – Bruno