iOS 判断身份证号码
2016-06-21 09:27
363 查看
//判断身份证号码
+ (BOOL)validateIdentityCard: (NSString *)identityCard;
//精确判断身份证号码
+ (BOOL)validateIDCardNumber:(NSString *)identityCard;
//身份证号
+ (BOOL)validateIdentityCard: (NSString *)identityCard
{
BOOL flag = NO;
if (identityCard.length <=
0) {
return flag;
}
NSString *regex2 =
@"^(\\d{14}|\\d{17})(\\d|[xX])$";
NSPredicate *identityCardPredicate = [NSPredicate
predicateWithFormat:@"SELF MATCHES %@",regex2];
flag = [identityCardPredicate evaluateWithObject:identityCard];
return flag;
}
+ (BOOL)validateIDCardNumber:(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;
int year = 0;
switch (length) {
case 15:
year = [value 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: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 %
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)];
// 判断校验位
if ([M
isEqualToString:[value substringWithRange:NSMakeRange(17,1)]])
{
return
YES;// 检测ID的校验位
}else {
return
NO;
}
}else {
return
NO;
}
default:
return
NO;
}
}
+ (BOOL)validateIdentityCard: (NSString *)identityCard;
//精确判断身份证号码
+ (BOOL)validateIDCardNumber:(NSString *)identityCard;
//身份证号
+ (BOOL)validateIdentityCard: (NSString *)identityCard
{
BOOL flag = NO;
if (identityCard.length <=
0) {
return flag;
}
NSString *regex2 =
@"^(\\d{14}|\\d{17})(\\d|[xX])$";
NSPredicate *identityCardPredicate = [NSPredicate
predicateWithFormat:@"SELF MATCHES %@",regex2];
flag = [identityCardPredicate evaluateWithObject:identityCard];
return flag;
}
+ (BOOL)validateIDCardNumber:(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;
int year = 0;
switch (length) {
case 15:
year = [value 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: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 %
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)];
// 判断校验位
if ([M
isEqualToString:[value substringWithRange:NSMakeRange(17,1)]])
{
return
YES;// 检测ID的校验位
}else {
return
NO;
}
}else {
return
NO;
}
default:
return
NO;
}
}
相关文章推荐
- iOS 根据生日(单位秒)转换成一个年龄
- iOS pch中或者common.h中常见的代码
- MVC's Blind Structure Way
- iOS利用AFNetworking(AFN) 实现图片上传
- iOS支付宝支付
- iOS用户是否开启定位服务
- ios Symbol(s) not found for architecture arm64总结 含隐藏错误cocoapods
- iOS获取 移动设备型号
- iOS 基础篇13- 通知的使用
- iOS Base64加密
- ios 学习动画的套路 (一)
- iOS计算缓存内容大小
- iOS 基础篇12- 定时器的使用
- IOS开发系列--TableView、多个TableViewCell、自定义Cell、Cell上画画(故事板+代码方式),ios7tableview索引
- 当连接iOS设备照相机时禁止打开照片Photos等程序
- iOS开发实战——CollectionView中cell的间距设置
- iOS 获取屏幕的朝向
- iOS 传感器(加速计 + 陀螺仪)
- iOS中的动画
- iOS开发:创建真机调试证书