-1
我有这个代码在java中验证银行帐号,我想要做的是将其转换为Objective-C,但我认为我的代码不是'牛逼的工作已经打算,这里是代码:转换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;
}
}
}
我的Objective-C的尝试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;
}
我的Objective-C的尝试:
-(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;
}
很抱歉的长期职位,但我真的需要这个:)
编辑我有测试这些有效的银行账号@ “000200041901”和@“001200144174”方法“accountValidation”的结果必须返回true,但问题是它始终返回false。
这听起来像是SO的主题。也许试试这里:http://codereview.stackexchange.com/ –
你_think_你的代码没有按预期工作?那么我们应该怎么知道?请执行一些测试,然后在您遇到特定问题时回复给我们。 – Keppil
对不起,我对这个模糊的问题不好,我编辑它进一步澄清。 – Bruno