iOS技能收集iOS开发iOS进阶指南

22、[ iOS ] 身份证号校验

2016-02-29  本文已影响251人  天听云道
/**
* 功能:身份证号校验
*/   
// ------确定
- (void)authClick {
    
    if (![self checkData]) {
        return;
    };
// 写验证成功后的代码
}
- (BOOL)checkData {
    MBProgressHUD *mbhud = [[MBProgressHUD alloc] initWithView:self.view];
    [self.view addSubview:mbhud];
    mbhud.delegate = self;
    mbhud.yOffset = - 50;
    mbhud.mode = MBProgressHUDModeText;
    // 姓名
    if (_name.text.length == 0) {
        mbhud.labelText = @"请输入姓名";
        [mbhud show:YES];
        [mbhud hide:YES afterDelay:1];
        return NO;
    }

    // 身份证
    if (_identity.text.length == 0) {
        mbhud.labelText = @"请输入身份证号码";
        [mbhud show:YES];
        [mbhud hide:YES afterDelay:1];
        return NO;
    }
    
    if (_identity.text.length == 15 || _identity.text.length == 18) {
        NSString *emailRegex = @"^[0-9]*$";
        NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegex];
        bool sfzNo = [emailTest evaluateWithObject:[_identity.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]];
        
        if (_identity.text.length == 15) {
            if (!sfzNo) {
                mbhud.labelText = @"请输入正确的身份证号";
                [mbhud show:YES];
                [mbhud hide:YES afterDelay:1];
                return NO;
            }
        }
        else if (_identity.text.length == 18) {
            bool sfz18NO = [self checkIdentityCardNo:_identity.text];
            if (!sfz18NO) {
                mbhud.labelText = @"请输入正确的身份证号";
                [mbhud show:YES];
                [mbhud hide:YES afterDelay:1];
                return NO;
            }
        }
    }else{
        mbhud.labelText = @"请输入正确的身份证号";
        [mbhud show:YES];
        [mbhud hide:YES afterDelay:1];
        return NO;
    }
    
    return YES;
}
#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;
}
上一篇下一篇

猜你喜欢

热点阅读