验证身份证是否正确
来源:互联网 发布:江南大学网络教育官网 编辑:程序博客网 时间:2024/05/26 14:08
+ (BOOL)validateIDCardNumber:(NSString *)value {
value = [value stringByTrimmingCharactersInSet:[NSCharacterSetwhitespaceAndNewlineCharacterSet]];
int length =0;
if (!value) {
returnNO;
}else {
length = value.length;
if (length !=15 && length !=18) {
returnNO;
}
}
// 省份代码
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 = [valuesubstringToIndex:2];
BOOL areaFlag =NO;
for (NSString *areaCodein areasArray) {
if ([areaCodeisEqualToString:valueStart2]) {
areaFlag =YES;
break;
}
}
if (!areaFlag) {
return false;
}
NSRegularExpression *regularExpression;
NSUInteger numberofMatch;
int year =0;
switch (length) {
case15:
year = [valuesubstringWithRange:NSMakeRange(6,2)].intValue +1900;
if (year %4 ==0 || (year %100 ==0 && year %4 ==0)) {
regularExpression = [[NSRegularExpressionalloc]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 = [[NSRegularExpressionalloc]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 = [regularExpressionnumberOfMatchesInString:value
options:NSMatchingReportProgress
range:NSMakeRange(0, value.length)];
[regularExpressionrelease];
if(numberofMatch >0) {
returnYES;
}else {
returnNO;
}
case18:
year = [valuesubstringWithRange:NSMakeRange(6,4)].intValue;
if (year %4 ==0 || (year %100 ==0 && year %4 ==0)) {
regularExpression = [[NSRegularExpressionalloc]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 = [[NSRegularExpressionalloc]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 = [regularExpressionnumberOfMatchesInString:value
options:NSMatchingReportProgress
range:NSMakeRange(0, value.length)];
[regularExpressionrelease];
if(numberofMatch >0) {
int S = ([valuesubstringWithRange:NSMakeRange(0,1)].intValue + [valuesubstringWithRange:NSMakeRange(10,1)].intValue) *7 + ([valuesubstringWithRange:NSMakeRange(1,1)].intValue + [valuesubstringWithRange:NSMakeRange(11,1)].intValue) *9 + ([valuesubstringWithRange:NSMakeRange(2,1)].intValue + [valuesubstringWithRange:NSMakeRange(12,1)].intValue) *10 + ([valuesubstringWithRange:NSMakeRange(3,1)].intValue + [valuesubstringWithRange:NSMakeRange(13,1)].intValue) *5 + ([valuesubstringWithRange:NSMakeRange(4,1)].intValue + [valuesubstringWithRange:NSMakeRange(14,1)].intValue) *8 + ([valuesubstringWithRange:NSMakeRange(5,1)].intValue + [valuesubstringWithRange:NSMakeRange(15,1)].intValue) *4 + ([valuesubstringWithRange:NSMakeRange(6,1)].intValue + [valuesubstringWithRange:NSMakeRange(16,1)].intValue) *2 + [valuesubstringWithRange:NSMakeRange(7,1)].intValue *1 + [valuesubstringWithRange:NSMakeRange(8,1)].intValue *6 + [valuesubstringWithRange:NSMakeRange(9,1)].intValue *3;
int Y = S %11;
NSString *M =@"F";
NSString *JYM =@"10X98765432";
M = [JYMsubstringWithRange:NSMakeRange(Y,1)];//判断校验位
if ([MisEqualToString:[valuesubstringWithRange:NSMakeRange(17,1)]]) {
returnYES;//检测ID的校验位
}else {
returnNO;
}
}else {
returnNO;
}
default:
returnfalse;
}
}
- 验证身份证是否正确
- excel 中验证身份证是否正确
- javascript代码验证身份证格式是否正确
- 初步验证身份证是否正确,验证是否为手机号php
- 验证身份证是否有效
- iOS - 正则表达式判断邮箱,身份证,手机,车牌号...验证是否正确
- js 验证是否是身份证
- C#验证身份证是否有效
- 验证邮箱 是否正确
- 验证身份证号码是否正确
- 验证日期是否正确
- 验证身份证号是否正确
- 验证车牌号是否正确
- 验证手机号是否正确
- 验证文件格式是否正确
- 18位身份证校验是否正确
- 正则表达式判断邮箱、身份证..是否正确
- 正则表达式判断邮箱、身份证..是否正确
- HttpServletRequest.getParameterMap
- linux改变文件权限chmod chgrp chown
- Linux Centos 6 rpm 安装Mysql-5.6.25
- leetcode Same Tree
- Qt入门之utf8与unicode转换
- 验证身份证是否正确
- SecureCRT中文显示乱码
- 针对 Hadoop 的 Oozie 工作流管理引擎的实际应用
- Linux IPC总结
- Android 虚拟按键驱动实现
- VS2010调用tesseract步骤
- HNOI2008玩具装箱toy题解
- linux shell学习笔记mkdir
- 修改 editButtonItem.title