大陆身份证号码的检测算法,直接上代码了.
+ (BOOL)isValidateID:(NSString *)inputID {
BOOL isValidate = NO;
if (inputID.length != 18 || [inputID containsString:@" "]) {
return NO;
}
int li_wi_list[17] = {7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};
int li_checkSum, li_sum = 0;
char ls_checkSum;
for (int i = 0; i < 17 ; i ++ ) {
NSString *subStr = [inputID substringWithRange:NSMakeRange(i , 1)];
NSInteger num = [subStr integerValue];
int wi = li_wi_list[i];
li_sum += num * wi;
}
li_checkSum = (12 - li_sum % 11) % 11;
if (li_checkSum == 10) {
ls_checkSum = 'X';
}else {
ls_checkSum = [[NSString stringWithFormat:@"%d",li_checkSum] characterAtIndex:0];
}
if ( ls_checkSum == [inputID characterAtIndex:17]) {
isValidate = YES;
}else {
isValidate = NO;
}
return isValidate;
}