iOS验证身份证号码是否合法

正好用到,作为纪录,代码丢完就走

//验证身份证号码
+(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;
}

实际使用场景

- (void)textFieldDidEndEditing:(UITextField *)textField{
    if (textField == _tfId) {
            if (![MyTool checkIdentityCardNo:textField.text]) {
                [self showMessage:@"请输入合法的身份证号"];
                _tfId.text = @"";
            }
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 174,159评论 25 709
  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,395评论 11 349
  • 决定去澳门之前,我有些紧张。这个曾被不同体制殖民的地方,是容易相处还是难以融入呢? 我为此花了几个小时在网上认认真...
    努力攒钱的二花阅读 2,171评论 0 0
  • 姓名,成俊萍,东莞耀升机电有限公司 【日精进打卡第6天】 【知~学习】 《六项精进》诵读5遍 ,累计20遍 《大学...
    成俊萍阅读 115评论 0 0
  • 初入蜀地,便被窗外飘荡着的火锅香气吸引,虽然说此行目的就是吃正宗成都小吃,可是这座城还是留下了太多回忆。 蚕蚕难得...
    躲在角落的cc阅读 472评论 0 0