您的位置:首页 > 移动开发 > IOS开发

iOS - 身份证号判断

2015-12-31 14:00 357 查看
#pragma mark - 身份证识别

+(BOOL)checkIdentityCardNo:(NSString*)cardNo;

//根据身份证号获取性别

+(NSInteger)getIdentityCardSex:(NSString *)numberStr;

//根据身份证号获取年龄

+(NSString *)getIdentityCardAge:(NSString *)numberStr;

#pragma mark - 身份证识别

+(BOOL)checkIdentityCardNo:(NSString*)cardNo

{

if (cardNo.length != 18) {

return NO;

}

NSArray* codeArray = [NSArray arrayWithObjects:@"7",@"9",@"10",@"5",@"8",@"4",@"2",@"1",@"6",@"3",@"7",@"9",@"10",@"5",@"8",@"4",@"2", nil];

NSDictionary* checkCodeDic = [NSDictionary dictionaryWithObjects:[NSArray arrayWithObjects:@"1",@"0",@"X",@"9",@"8",@"7",@"6",@"5",@"4",@"3",@"2", nil] forKeys:[NSArray arrayWithObjects:@"0",@"1",@"2",@"3",@"4",@"5",@"6",@"7",@"8",@"9",@"10", nil]];

NSScanner* scan = [NSScanner scannerWithString:[cardNo substringToIndex:17]];

int val;

BOOL isNum = [scan scanInt:&val] && [scan isAtEnd];

if (!isNum) {

return NO;

}

int sumValue = 0;

for (int i =0; i<17; i++) {

sumValue+=[[cardNo substringWithRange:NSMakeRange(i , 1) ] intValue]* [[codeArray objectAtIndex:i] intValue];

}

NSString* strlast = [checkCodeDic objectForKey:[NSString stringWithFormat:@"%d",sumValue%11]];

if ([strlast isEqualToString: [[cardNo substringWithRange:NSMakeRange(17, 1)]uppercaseString]]) {

return YES;

}

return NO;

}

//根据身份证号获取性别

+(NSInteger)getIdentityCardSex:(NSString *)numberStr

{

int sexInt=[[numberStr substringWithRange:NSMakeRange(16,1)] intValue];

if(sexInt%2!=0)

{

return 1;

}

else

{

return 0;

}

}

//根据身份证号获取年龄

+(NSString *)getIdentityCardAge:(NSString *)numberStr

{

NSDateFormatter *formatterTow = [[NSDateFormatter alloc]init];

[formatterTow setDateFormat:@"yyyy-MM-dd"];

NSString* dataString =[self birthdayStrFromIdentityCard:numberStr];

NSDate *bsyDate = [formatterTow dateFromString:dataString];

NSTimeInterval dateDiff = [bsyDate timeIntervalSinceNow];

int age = trunc(dateDiff/(60*60*24))/365;

return [NSString stringWithFormat:@"%d",-age];

}

//根据身份证号获取生日

+(NSString *)birthdayStrFromIdentityCard:(NSString *)numberStr

{

NSMutableString *result = [NSMutableString stringWithCapacity:0];

NSString *year = nil;

NSString *month = nil;

BOOL isAllNumber = YES;

NSString *day = nil;

if([numberStr length]<14)

return result;

//**截取前14位

NSString *fontNumer = [numberStr substringWithRange:NSMakeRange(0, 13)];

//**检测前14位否全都是数字;

const char *str = [fontNumer UTF8String];

const char *p = str;

while (*p!='\0') {

if(!(*p>='0'&&*p<='9'))

isAllNumber = NO;

p++;

}

if(!isAllNumber)

return result;

year = [numberStr substringWithRange:NSMakeRange(6, 4)];

month = [numberStr substringWithRange:NSMakeRange(10, 2)];

day = [numberStr substringWithRange:NSMakeRange(12,2)];

[result appendString:year];

[result appendString:@"-"];

[result appendString:month];

[result appendString:@"-"];

[result appendString:day];

return result;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: