zoukankan      html  css  js  c++  java
  • iOS 身份证验证(转)

    原文地址:http://www.cnblogs.com/yswdarren/p/3559423.html

    - (void)onClickButton:(id) sender{
    if (tmp_txt.text.length == 15 || tmp_txt.text.length == 18) {                
                    NSString *emailRegex = @"^[0-9]*$";
                    NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegex];
                    bool sfzNo = [emailTest evaluateWithObject:[tmp_txt.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]];
                    
                    if (tmp_txt.text.length == 15) {
                        if (!sfzNo) {
                            [self HUDShow:@"请输入正确的身份证号" delay:1.5];                       
                            return NO;
                        }
                    }
                    else if (tmp_txt.text.length == 18) {                    
                        bool sfz18NO = [Global checkIdentityCardNo:tmp_txt.text];
                        if (!sfz18NO) {
                            [self HUDShow:@"请输入正确的身份证号" delay:1.5];                       
                            return NO;
                        }
                    }
                }else{
                    [self HUDShow:@"请输入正确的身份证号" delay:1.5];               
                    return NO;
                }
    }
    
    #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;
    }
  • 相关阅读:
    SLAM基础知识
    标准的机器学习问题
    LAS的数据格式
    Python中的多线程和多进程
    【go】log
    【亲密关系】3-吸引力
    【mysql】做 mariadb 的备库无法启动
    【zabbix-server】Supervising process xxxx which is not our child....exits
    【win10】添加程序自启动
    【Oralce】数据去重,限制某个字段的数据长度,替换空格符
  • 原文地址:https://www.cnblogs.com/ljios/p/5306769.html
Copyright © 2011-2022 走看看