iOS 身份证号码的验证(15位身份证已经不再使用)

-(BOOL)checkIdCardNoFunc:(NSString *) IDCardNo{
   
    NSString *reg = @"/(^\\d{18}$)|(^\\d{17}(\\d|X|x)$)/";
    NSPredicate *pred = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", reg];
    BOOL isMatch = [pred evaluateWithObject:IDCardNo];
    if (isMatch) {
        NSString *cityNo=[IDCardNo  substringWithRange:NSMakeRange(0, 2)];
        if ([self checkCityNo:cityNo]) {
            NSString *birth= [IDCardNo substringWithRange:NSMakeRange(6, ] ;
            NSDateFormatter *inputFormatter = [[[NSDateFormatter alloc] init] autorelease];
            [inputFormatter setLocale:[[[NSLocale alloc] initWithLocaleIdentifier:@"en_US"] autorelease]];
            [inputFormatter setDateFormat:@"yyyyMMdd"];
            NSDate* inputDate = [inputFormatter dateFromString:birth];
           
            if (inputDate) {
                const int factor[] = { 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 };//加权因子
                const int checktable[] = { 1, 0, 10, 9, 8, 7, 6, 5, 4, 3, 2 };//校验值对应表
                int checksum = 0;
               
                NSString *befor17=[IDCardNo substringWithRange:NSMakeRange(0,17)];
                for(int i=0; i<17; i++) {
                    int num=[[befor17  substringWithRange:NSMakeRange(i,1)]  intValue]*factor[i];
                    checksum+=num;
                }
                int yushu=checksum%11;
                if (yushu>10) {
                    return NO;
                }else{
                    int s=checktable[yushu];
                    NSString  *checkNoStr=[IDCardNo substringWithRange:NSMakeRange(17, 1)]  ;
                    if (checkNoStr) {
                        if ( [checkNoStr isEqualToString:@"X"]) {
                            if (s==2) {
                                return YES;
                            }
                            return NO;
                        }
                        else if([checkNoStr  intValue]==s){
                            return YES;
                        }
                    }
                }
            }
       
        }
    }
    return NO;
}

-(BOOL)checkCityNo:(NSString *)cityNo{
    NSArray *cityCode=[NSArray arrayWithObjects:@"11",@"12",@"13",@"14",@"14",@"15",@"21",@"22",@"23",@"31",@"32",@"33",@"34",@"35",@"36",@"37",@"41",@"42",@"43",@"44",@"45",@"46",@"50",@"51",@"52",@"53",@"54",@"61",@"62",@"63",@"64",@"65",@"71",@"81",@"82",@"91", nil];
    for (int i=0; i<[cityCode count]; i++) {
        if ([cityNo isEqual:cityCode[i]]) {
            return YES;
        }
    }
    return NO;

}

猜你喜欢

转载自jaybril.iteye.com/blog/1975942