身份证号码验证
来源:互联网 发布:淘宝上的代理可靠吗 编辑:程序博客网 时间: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
- 验证身份证号码
- 身份证号码验证
- 验证身份证号码
- 身份证号码验证
- 验证身份证号码
- 身份证号码验证
- 验证身份证号码
- 身份证号码验证
- 身份证号码验证
- 验证身份证号码
- 身份证号码验证
- 身份证号码验证 !
- 验证身份证号码
- 验证身份证号码
- 验证身份证号码
- 身份证号码验证
- 身份证号码验证
- 身份证号码验证
- TextViewExpandableAnimation
- Nginx 入门教程常用配置解析
- Xcode7.3下载iOS8模拟器用于测试
- NDK编译选项的几个解释
- mybatis或ibatis中的#和$的区别?
- 身份证号码验证
- COGS 2060 除法表达式
- 一维王国问题,最少需要几颗炸弹
- 通过Excel生成批量SQL语句,处理大量数据的好办法
- iOS ScrollView的 contentSize contentInset contentOffset 三个属性直接的区别
- USACO2014Open Gold Cow Optics
- 1min了解ANR
- C语言:哲学家就餐问题
- NOIP提高组【JZOJ4786】小a的强迫症