身份证号码验证

来源:互联网 发布:淘宝上的代理可靠吗 编辑:程序博客网 时间:2024/05/16 04:53

身份证号码验证

typedef enum{    VerifySuccess = 1,    idNumCountError,    idNumRuleError,    VerifyError,}VerifyMessage;/** *  身份正好校验方法 * *  @return bool */+ (VerifyMessage)isValidateIdentityCard:(NSString *)identityCard {    //去掉多余空格 返回去除掉空格之后的字符串    NSString * value = [identityCard stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];    NSInteger length =0;    if (!value) {        return idNumCountError;    }else {        length = value.length;        //判断输入的身份证号码长度        if (length !=15 && length !=18) {            return idNumCountError;        }    }    // 省份代码    NSArray *areasArray =@[@"11",@"12", @"13",@"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"];    // 取出身份证的前两位    NSString *valueStart2 = [value substringToIndex:2];    BOOL areaFlag = NO;    //先判断省份代码是否有效    for (NSString *areaCode in areasArray) {        if ([areaCode isEqualToString:valueStart2]) {            areaFlag =YES;            break;        }    }    //无效返回错误信息    if (!areaFlag) {        return idNumRuleError;    }    NSRegularExpression *regularExpression;    NSUInteger numberofMatch;    int year =0;    switch (length) {        case 15:            year = [value substringWithRange:NSMakeRange(6,2)].intValue +1900;            NSLog(@" 出生年 === %d",year);            //测试出生日期的合法性            if (year %4 ==0 || (year %100 ==0 && year %4 ==0)) {                regularExpression = [[NSRegularExpression alloc]initWithPattern:@"^[1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}$" options:NSRegularExpressionCaseInsensitive error:nil];            }else {                regularExpression = [[NSRegularExpression alloc]initWithPattern:@"^[1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}$" options:NSRegularExpressionCaseInsensitive error:nil];            }            numberofMatch = [regularExpression numberOfMatchesInString:value options:NSMatchingReportProgress range:NSMakeRange(0, value.length)];            if(numberofMatch >0) {                return VerifySuccess;            }else {                return idNumRuleError;            }        case 18:            year = [value substringWithRange:NSMakeRange(6,4)].intValue;            if (year %4 ==0 || (year %100 ==0 && year %4 ==0)) {                regularExpression = [[NSRegularExpression alloc]initWithPattern:@"^[1-9][0-9]{5}19[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}[0-9Xx]$"options:NSRegularExpressionCaseInsensitive error:nil];            }else {                regularExpression = [[NSRegularExpression alloc]initWithPattern:@"^[1-9][0-9]{5}19[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}[0-9Xx]$"options:NSRegularExpressionCaseInsensitive error:nil];            }            numberofMatch = [regularExpression numberOfMatchesInString:value options:NSMatchingReportProgress range:NSMakeRange(0, value.length)];            if(numberofMatch >0) {                int S = ([value substringWithRange:NSMakeRange(0,1)].intValue + [value substringWithRange:NSMakeRange(10,1)].intValue) *7 + ([value substringWithRange:NSMakeRange(1,1)].intValue + [value substringWithRange:NSMakeRange(11,1)].intValue) *9 + ([value substringWithRange:NSMakeRange(2,1)].intValue + [value substringWithRange:NSMakeRange(12,1)].intValue) *10 + ([value substringWithRange:NSMakeRange(3,1)].intValue + [value substringWithRange:NSMakeRange(13,1)].intValue) *5 + ([value substringWithRange:NSMakeRange(4,1)].intValue + [value substringWithRange:NSMakeRange(14,1)].intValue) *8 + ([value substringWithRange:NSMakeRange(5,1)].intValue + [value substringWithRange:NSMakeRange(15,1)].intValue) *4 + ([value substringWithRange:NSMakeRange(6,1)].intValue + [value substringWithRange:NSMakeRange(16,1)].intValue) *2 + [value substringWithRange:NSMakeRange(7,1)].intValue *1 + [value substringWithRange:NSMakeRange(8,1)].intValue *6 + [value substringWithRange:NSMakeRange(9,1)].intValue *3;                int Y = S % 11;                NSString * M =@"F";                NSString * JYM =@"10X98765432";                // 判断校验位                M = [JYM substringWithRange:NSMakeRange(Y,1)];                // 检测ID的校验位                if ([M isEqualToString:[value substringWithRange:NSMakeRange(17,1)]]) {                    return VerifySuccess;                }else {                    return idNumRuleError;                }            }else {                return idNumRuleError;            }        default:            return VerifyError;    }}
0 0
原创粉丝点击