判断身份证号正确
来源:互联网 发布:实景地图软件 编辑:程序博客网 时间:2024/05/19 19:15
创建一个公共类,
CommonTool.h
/** * @author lixianhong, 16-07-15 15:07:37 * * 判断身份证是否正确 * * @param value 身份证号 * * @return YES or NO */+ (BOOL)judgeIdcardLegal:(NSString *)value;
CommonTool.m
+ (BOOL)judgeIdcardLegal:(NSString *)value { value = [value stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; NSInteger length =0; if (!value) { return NO; }else { length = value.length; if (length !=15 && length !=18) { return NO; } } // 省份代码 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 false; } //生日部分的编码 NSRegularExpression *regularExpression; NSUInteger numberofMatch; NSInteger year =0; switch (length) { case 15: year = [value substringWithRange:NSMakeRange(8,2)].intValue +1900; if (year %400 ==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:匹配到得字符串的个数 numberofMatch = [regularExpression numberOfMatchesInString:value options:NSMatchingReportProgress range:NSMakeRange(0, value.length)]; if(numberofMatch >0) { return YES; }else { return NO; } case 18: year = [value substringWithRange:NSMakeRange(6,4)].intValue; if (year %400 ==0 || (year %100 !=0 && year %4 ==0)) { //原来的@"^[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]$" regularExpression = [[NSRegularExpression alloc]initWithPattern:@"^[1-9][0-9]{5}(19|20)[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|20)[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)];// 判断校验位 if ([M isEqualToString:[value substringWithRange:NSMakeRange(17,1)]]) { return YES;// 检测ID的校验位 }else { return NO; } }else { return NO; } default: return false; } }
0 0
- 判断身份证号正确
- js判断身份证号是否正确
- android 判断身份证号是否正确
- java判断身份证号是否正确
- 判断字符串是否中文 & 判断是否正确身份证号
- javascript判断身份证号信息是否正确的方法
- OC正则表达式判断手机号、身份证号、车牌号等是否正确
- 验证身份证号是否正确
- android 判断一串数字是否为正确手机号和身份证号的校验工具类
- IOS 判断手机号 身份证号
- iOS身份证号判断
- js判断身份证号
- 判断身份证号是否合法
- 根据身份证号判断年龄
- js 方法-判断身份证号
- 利用正则表达式判断身份证号
- 利用正则表达式判断身份证号
- 利用正则表达式判断身份证号
- 系统重装之VS+Sql2012+IIS安装总结
- 第26周-window程序设计(基础篇)-第5章(图形基础)-点和线
- leetcode之判断中心对称二叉树
- Linux下oracle启动/关闭监听(bash:lsnrctl:command not found)
- 小K
- 判断身份证号正确
- android各种常用设置
- 【codevs 2188】最长上升子序列
- Ubunu 14.04 下搜狗输入法的安装
- java持久层框架mybatis如何防止sql注入
- 稀疏表达以及相关改进
- 【Cherry云计算】ACF - 阿里云认证考试
- c#修改注册表改变【对该区域中的所有站点要求服务器验证】
- 偏差和方差的区别(机器学习)