美文网首页
验证身份证

验证身份证

作者: CoderLNHui | 来源:发表于2017-03-15 14:23 被阅读14次
    
    #import <Foundation/Foundation.h>
    
    @interface STValidateUtil : NSObject
    
    
    //身份证校验
    + (BOOL)verifyIDCardNumber:(NSString *)value;
    
    
    @end
    
    
    #import "STValidateUtil.h"
    
    @implementation STValidateUtil
    
    
    + (BOOL)verifyIDCardNumber:(NSString *)value{
        value = [value stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
        if([value length]!=18){
            return NO;
        }
        NSString*mmdd=@"(((0[13578]|1[02])(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)(0[1-9]|[12][0-9]|30))|(02(0[1-9]|[1][0-9]|2[0-8])))";
        NSString*leapMmdd=@"0229";
        NSString*year=@"(19|20)[0-9]{2}";
        NSString*leapYear=@"(19|20)(0[48]|[2468][048]|[13579][26])";
        NSString*yearMmdd=[NSString stringWithFormat:@"%@%@",year,mmdd];
        NSString*leapyearMmdd=[NSString stringWithFormat:@"%@%@",leapYear,leapMmdd];
        NSString*yyyyMmdd=[NSString stringWithFormat:@"((%@)|(%@)|(%@))",yearMmdd,leapyearMmdd,@"20000229"];
        NSString*area=@"(1[1-5]|2[1-3]|3[1-7]|4[1-6]|5[0-4]|6[1-5]|82|[7-9]1)[0-9]{4}";
        NSString*regex=[NSString stringWithFormat:@"%@%@%@",area,yyyyMmdd,@"[0-9]{3}[0-9Xx]"];
        
        NSPredicate *regexTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",regex];
        if(![regexTest evaluateWithObject:value]){
            return NO;
        }
        NSInteger summary =([value substringWithRange:NSMakeRange(0,1)].integerValue
                            +[value substringWithRange:NSMakeRange(10,1)].integerValue)*7
        +([value substringWithRange:NSMakeRange(1,1)].integerValue
          +[value substringWithRange:NSMakeRange(11,1)].integerValue)*9
        +([value substringWithRange:NSMakeRange(2,1)].integerValue
          +[value substringWithRange:NSMakeRange(12,1)].integerValue)*10
        +([value substringWithRange:NSMakeRange(3,1)].integerValue
          +[value substringWithRange:NSMakeRange(13,1)].integerValue)*5
        +([value substringWithRange:NSMakeRange(4,1)].integerValue
          +[value substringWithRange:NSMakeRange(14,1)].integerValue)*8
        +([value substringWithRange:NSMakeRange(5,1)].integerValue
          +[value substringWithRange:NSMakeRange(15,1)].integerValue)*4
        +([value substringWithRange:NSMakeRange(6,1)].integerValue
          +[value substringWithRange:NSMakeRange(16,1)].integerValue)*2
        +[value substringWithRange:NSMakeRange(7,1)].integerValue*1
        +[value substringWithRange:NSMakeRange(8,1)].integerValue*6
        +[value substringWithRange:NSMakeRange(9,1)].integerValue*3;
        NSInteger remainder = summary%11;
        NSString *checkBit = @"";
        NSString *checkString = @"10X98765432";
        checkBit = [checkString substringWithRange:NSMakeRange(remainder,1)];//判断校验位
        return[checkBit isEqualToString:[[value substringWithRange:NSMakeRange(17,1)]uppercaseString]];
    }
    
    
    @end
    

    相关文章

      网友评论

          本文标题:验证身份证

          本文链接:https://www.haomeiwen.com/subject/nuvlnttx.html