`
jaybril
  • 浏览: 48649 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

iOS 身份证号码的验证(15位身份证已经不再使用)

 
阅读更多
-(BOOL)checkIdCardNoFunc:(NSString *) IDCardNo{
   
    NSString *reg = @"/(^\\d{18}$)|(^\\d{17}(\\d|X|x)$)/";
    NSPredicate *pred = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", reg];
    BOOL isMatch = [pred evaluateWithObject:IDCardNo];
    if (isMatch) {
        NSString *cityNo=[IDCardNo  substringWithRange:NSMakeRange(0, 2)];
        if ([self checkCityNo:cityNo]) {
            NSString *birth= [IDCardNo substringWithRange:NSMakeRange(6,] ;
            NSDateFormatter *inputFormatter = [[[NSDateFormatter alloc] init] autorelease];
            [inputFormatter setLocale:[[[NSLocale alloc] initWithLocaleIdentifier:@"en_US"] autorelease]];
            [inputFormatter setDateFormat:@"yyyyMMdd"];
            NSDate* inputDate = [inputFormatter dateFromString:birth];
           
            if (inputDate) {
                const int factor[] = { 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 };//加权因子
                const int checktable[] = { 1, 0, 10, 9, 8, 7, 6, 5, 4, 3, 2 };//校验值对应表
                int checksum = 0;
               
                NSString *befor17=[IDCardNo substringWithRange:NSMakeRange(0,17)];
                for(int i=0; i<17; i++) {
                    int num=[[befor17  substringWithRange:NSMakeRange(i,1)]  intValue]*factor[i];
                    checksum+=num;
                }
                int yushu=checksum%11;
                if (yushu>10) {
                    return NO;
                }else{
                    int s=checktable[yushu];
                    NSString  *checkNoStr=[IDCardNo substringWithRange:NSMakeRange(17, 1)]  ;
                    if (checkNoStr) {
                        if ( [checkNoStr isEqualToString:@"X"]) {
                            if (s==2) {
                                return YES;
                            }
                            return NO;
                        }
                        else if([checkNoStr  intValue]==s){
                            return YES;
                        }
                    }
                }
            }
       
        }
    }
    return NO;
}

-(BOOL)checkCityNo:(NSString *)cityNo{
    NSArray *cityCode=[NSArray arrayWithObjects:@"11",@"12",@"13",@"14",@"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", nil];
    for (int i=0; i<[cityCode count]; i++) {
        if ([cityNo isEqual:cityCode[i]]) {
            return YES;
        }
    }
    return NO;

}
分享到:
评论

相关推荐

    ios-身份证验证.zip

    身份证验证

    ios-手机,邮箱,身份证号码验证.zip

    手机,邮箱,身份证号码验证是否合法可用

    iOS判断身份证号码是否正确的方法

    * 验证身份证号码是否正确的方法 * * @param IDNumber 传进身份证号码字符串 * * @return 返回YES或NO表示该身份证号码是否符合国家标准 */ - (BOOL)isCorrect:(NSString *)IDNumber { NSMutableArray *...

    IOS 身份证校验详细介绍及示例代码

    身份证是国民的身份编号,编号是有一定规律的,这里介绍身份证验证规则比较详细。项目中经常会需要对身份证进行校验,我们先了解一些基本知识,然后分析代码 居民身份证号码,根据〖中华人民共和国国家标准 GB 11643...

    ios 下的验证工具类

    // 1.NSString 为空(nil)的验证 // 2.邮箱验证 // 3.电话号验证 // 4.身份证验证

    ios-HZQRegexTestter(正则表达验证工具类,满足大众开发者验证需求,已封装且一句话验证。).zip

    正则表达式验证工具类,满足大众开发者验证需求,已封装且一句话即可验证,主要包括: /** * 1.... */ (BOOL)validateStrWithRange:... * 身份证号码验证 */ (BOOL)validateIDCardNumber:(NSString *)value;

    IOS正则表达式之验证密码身份证手机号

    在项目中,我们在验证用户的输入,最简单的方法就是使用正则表达式了,ios系统也提供很方便的方法,让我们可以轻松的来验证用户名,密码,身份证好 ,手机号等; 下面附上我在项目中用到的正则表达式的验证方法, 由于比较...

    iOS正则表达式验证手机号、邮箱、身份证号等

    主要介绍了iOS正则表达式验证手机号、邮箱、身份证号等信息,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

    iOS中常见正则表达式验证方法

    本篇文章主要介绍了iOS中常见正则表达式验证方法,主要包括有身份证、手机号、军官证,有兴趣的可以了解一下。

    ios-正则判断封装.zip

    主要对基础的正则判断类型进行封装,可以同时判断多个类型,方便使用,包括手机号、银行卡、身份证、邮箱以及其他基础验证,比如说在注册界面只需调用一次判断就可对账户、密码、验证码进行判断

    iOS开发验证判断语句之正则表达式小结

    最近在公司接手重构一个项目,发现之前的开发在验证格式这块写的太乱了,到处都有相关的验证代码,所以就有了这篇文章,供自己收藏也分享给有需要的朋友们参考借鉴,下面跟着小编来一起学习学习吧。

    ios-对正则判断的封装、一次调用判断多个控件.zip

    包含分类IBInspectable、模型、以及字典三种情况下对控件进行正则判断的封装、可以同时判断多个类型,方便使用,包括手机号、银行卡、身份证、邮箱以及其他基础验证,比如说在注册界面只需调用一次判断就可对账户、...

    基于OpenCV+tesseract-ocr实现身份证识别.zip

    跨平台:OpenCV支持多种操作系统,包括但不限于Windows、Linux、macOS、Android和iOS,确保代码能够在不同平台上无缝运行。 丰富的功能:库中包含了数千个优化过的函数,涵盖了计算机视觉领域的诸多方面,如图像...

    authing-rn-sdk:用于React Native的身份验证SDK

    SDK for React Native :house: ... 。 以下是提供的完整功能列表: ...手机验证码登录 ...移动端 APP 社会化登录 目前支持的社会化登录有: ...注:从 react-native 0.60 版本开始,不再需要手动执行 react-

    公开IOS-SDK

    土耳其身份证(新):您可以在其中上传新的土耳其身份证。 土耳其身份证(旧):您可以在其中上传旧的土耳其身份证。 土耳其驾照:您可以在其中上载旧的土耳其驾照。 护照:您也可以上传护照以验证您的身份。2.上传...

    String.swift

    swift语言实现的身份证号正则验证,在直播项目的实名认证模块使用过,很好用,如果swift项目中有需要实名认证的模块,在身份正是否正确的检验环节,这是你的不二选择。

    判断用户输入的银行卡号是否正确的方法(基于Luhn算法的格式校验)

    开发中,有时候,为了打造更好的用户体验,同时减轻服务器端的压力,需要对于一些如,手机号码,银行卡号,身份证号码进行格式校验 下面是判断银行卡号输入是否正确的代码(基于Luhn算法的格式校验): iOS代码: /...

Global site tag (gtag.js) - Google Analytics