iOS_身份证号码校验
来源:互联网 发布:淘宝买宠物狗 编辑:程序博客网 时间:2024/05/22 00:25
- 校验身份证号码格式是否正确,正确返回
YES
。
BOOL IsIdentityCard(NSString * _Nullable IDCardNumber){ if (IDCardNumber.length <= 0) { return NO; } // 是否符合正则表达 NSString *regex2 = @"^(\\d{14}|\\d{17})(\\d|[xX])$"; NSPredicate *identityCardPredicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",regex2]; BOOL regexFlag = [identityCardPredicate evaluateWithObject:IDCardNumber]; if (!regexFlag) { return NO; } // 省份代码 身份证前两位 BOOL areasFlag = 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 = [IDCardNumber substringToIndex:2]; for (NSString *temp in areasArray) { if ([valueStart2 isEqualToString:temp]) { areasFlag = YES; break; } } if (!areasFlag) { return NO; } // 校验生日合法性 NSRegularExpression *regularExpression = nil; NSInteger numberofMatch = 0; int year = 0; if (IDCardNumber.length == 15) { year = [IDCardNumber substringWithRange:NSMakeRange(6,2)].intValue +1900; 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:IDCardNumber options:NSMatchingReportProgress range:NSMakeRange(0, IDCardNumber.length)]; if(numberofMatch > 0) { return YES; }else { return NO; } }else{ year = [IDCardNumber substringWithRange:NSMakeRange(6,4)].intValue; if (year %4 == 0 || (year %100 == 0 && year %4 == 0)) { regularExpression = [[NSRegularExpression alloc]initWithPattern:@"^[1-9][0-9]{5}[1-2]{1}[0-9]{3}[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}[1-2]{1}[0-9]{3}[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:IDCardNumber options:NSMatchingReportProgress range:NSMakeRange(0, IDCardNumber.length)]; if (numberofMatch > 0) { int Sum = ([IDCardNumber substringWithRange:NSMakeRange(0,1)].intValue + [IDCardNumber substringWithRange:NSMakeRange(10,1)].intValue) *7 + ([IDCardNumber substringWithRange:NSMakeRange(1,1)].intValue + [IDCardNumber substringWithRange:NSMakeRange(11,1)].intValue) *9 + ([IDCardNumber substringWithRange:NSMakeRange(2,1)].intValue + [IDCardNumber substringWithRange:NSMakeRange(12,1)].intValue) *10 + ([IDCardNumber substringWithRange:NSMakeRange(3,1)].intValue + [IDCardNumber substringWithRange:NSMakeRange(13,1)].intValue) *5 + ([IDCardNumber substringWithRange:NSMakeRange(4,1)].intValue + [IDCardNumber substringWithRange:NSMakeRange(14,1)].intValue) *8 + ([IDCardNumber substringWithRange:NSMakeRange(5,1)].intValue + [IDCardNumber substringWithRange:NSMakeRange(15,1)].intValue) *4 + ([IDCardNumber substringWithRange:NSMakeRange(6,1)].intValue + [IDCardNumber substringWithRange:NSMakeRange(16,1)].intValue) *2 + [IDCardNumber substringWithRange:NSMakeRange(7,1)].intValue *1 + [IDCardNumber substringWithRange:NSMakeRange(8,1)].intValue *6 + [IDCardNumber substringWithRange:NSMakeRange(9,1)].intValue *3; int Y = Sum % 11; NSString *checkCode = @"10X98765432"; // 判断校验位 NSString *code = [checkCode substringWithRange:NSMakeRange(Y,1)]; if ([code isEqualToString:[IDCardNumber substringWithRange:NSMakeRange(17, 1)].uppercaseString]) { return YES; }else{ return NO; } }else{ return NO; } }}
- 校验是否年满18周岁
/*! @abstract 校验18位身份证是否年满18周岁 */BOOL TCL_IsAdultPerson(NSString * _Nullable IDCardNumber){ if (!IsIdentityCard(IDCardNumber)) { return NO; }else{ NSString *year = [NSString stringWithFormat:@"%ld",[IDCardNumber substringWithRange:NSMakeRange(6,4)].integerValue + 18]; NSString *month = [IDCardNumber substringWithRange:NSMakeRange(10,2)]; NSString *day = [IDCardNumber substringWithRange:NSMakeRange(12,2)]; NSString *idDateString = [NSString stringWithFormat:@"%@.%@.%@ 08:00:00",year,month,day]; NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init]; [dateFormatter setDateFormat:@"yyyy.MM.dd HH:mm:ss"]; NSDate *idDate = [dateFormatter dateFromString:idDateString]; NSDate *nowDate = [NSDate dateWithTimeIntervalSinceNow:8*60*60]; NSComparisonResult result = [nowDate compare:idDate]; if (result != NSOrderedAscending) { return YES; }else{ return NO; } } return YES;}
阅读全文
0 0
- iOS_身份证号码校验
- 身份证号码校验
- 身份证号码校验
- 身份证号码校验
- 身份证号码校验
- 身份证号码校验
- 身份证号码校验
- 校验身份证号码
- 身份证号码校验 java校验
- iOS_校验手机号
- php身份证号码校验算法
- js 身份证号码校验实现
- PB身份证号码正确性校验
- JS校验身份证号码
- 身份证号码校验规则
- Oracle 身份证号码校验
- js校验身份证号码合法性
- JS校验身份证号码
- linux系统下的文件I/O操作
- 《PHP和MySQL WEB开发》第四章笔记
- react绑定事件
- InstantClient安装使用
- java.util.HashMap中的key为对象的问题,对象key获得相应的value值
- iOS_身份证号码校验
- 德国启用含有RFID芯片的新型身份证
- ACM单词拼接
- UVA 120Stacks of Flapjacks
- 51 nod 1574 排列转换(思维 贪心)
- Chrome开发者工具详解(1)-Elements、Console、Sources面板 Chrome开发者工具面板
- 归并排序(递归实现)
- SpringMVC4.* @ResponseBody 中文乱码无法解决
- iOS开发之网络音乐播放器(SC音乐)(一)