正则表达式身份证、日期、电话号码等
来源:互联网 发布:实验四 数据库安全管理 编辑:程序博客网 时间:2024/06/05 19:52
正则表达式
**身份证验证:
方式一:只能判断18位身份证:但是方法优于方法二**
+ (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;}
方式二:判断18位15位身份证
+ (BOOL)PINpersonalIdentificationNumber:(NSString *) textString{ NSString* number=@"(\\d{14}[0-9a-zA-Z])|(\\d{17}[0-9a-zA-Z])"; NSPredicate *numberPre = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",number]; if ([numberPre evaluateWithObject:textString]) { NSRange range1 = NSMakeRange(0, 1); NSInteger one = [[textString substringWithRange:range1] integerValue]; if (one < 9 && one > 0) { NSRange range2 = NSMakeRange(1, 1); NSInteger two = [[textString substringWithRange:range2] integerValue]; if (two < 8 && two >= 0) { NSRange range3 = NSMakeRange(6, 4); NSString *year = [textString substringWithRange:range3]; NSRange range4 = NSMakeRange(10, 2); NSString *month = [textString substringWithRange:range4]; NSRange range5 = NSMakeRange(12, 2); NSString *day = [textString substringWithRange:range5]; NSString *DateText = [NSString stringWithFormat:@"%@-%@-%@",year,month,day]; NSString *Date = @"(([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})-(((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]))))|((([0-9]{2})(0[48]|[2468][048]|[13579][26])|((0[48]|[2468][048]|[3579][26])00))-02-29)"; NSPredicate *numberPre1 = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",Date]; if ([numberPre1 evaluateWithObject:DateText]) { return YES; }else{ return NO; } }else{ return NO; } }else{ return NO; } }else{ return NO; }}
日期验证:
闰年的2月份有29天,因此匹配闰年日期格式为YYYY-MM-DD的正则表达式为:
(([0-9]{2})(0[48]|[2468][048]|[13579][26])|((0[48]|[2468][048]|[3579][26])00))-02-29
最后,将平年和闰年的日期验证表达式合并,我们得到最终的验证日期格式为YYYY-MM-DD的正则表达式为:
(([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})-(((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]))))|((([0-9]{2})(0[48]|[2468][048]|[13579][26])|((0[48]|[2468][048]|[3579][26])00))-02-29)
DD/MM/YYYY格式的正则验证表达式为:
(((0[1-9]|[12][0-9]|3[01])/((0[13578]|1[02]))|((0[1-9]|[12][0-9]|30)/(0[469]|11))|(0[1-9]|[1][0-9]|2[0-8])/(02))/([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3}))|(29/02/(([0-9]{2})(0[48]|[2468][048]|[13579][26])|((0[48]|[2468][048]|[3579][26])00)))
电话号码验证:
+ (BOOL) isMobile:(NSString *)mobileNumbel{ /** * 手机号码 * 移动:134[0-8],135,136,137,138,139,150,151,157,158,159,182,187,188 * 联通:130,131,132,152,155,156,185,186 * 电信:133,1349,153,180,189,181(增加) */ NSString * MOBIL = @"^1(3[0-9]|5[0-35-9]|8[025-9])\\d{8}$"; /** 10 * 中国移动:China Mobile 11 * 134[0-8],135,136,137,138,139,150,151,157,158,159,182,187,188 12 */ NSString * CM = @"^1(34[0-8]|(3[5-9]|5[017-9]|8[2378])\\d)\\d{7}$"; /** 15 * 中国联通:China Unicom 16 * 130,131,132,152,155,156,185,186 17 */ NSString * CU = @"^1(3[0-2]|5[256]|8[56])\\d{8}$"; /** 20 * 中国电信:China Telecom 21 * 133,1349,153,180,189,181(增加) 22 */ NSString * CT = @"^1((33|53|8[019])[0-9]|349)\\d{7}$"; NSPredicate *regextestmobile = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", MOBIL]; NSPredicate *regextestcm = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", CM]; NSPredicate *regextestcu = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", CU]; NSPredicate *regextestct = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", CT]; if (([regextestmobile evaluateWithObject:mobileNumbel] || [regextestcm evaluateWithObject:mobileNumbel] || [regextestct evaluateWithObject:mobileNumbel] || [regextestcu evaluateWithObject:mobileNumbel])) { return YES; } return NO;}
0 0
- 正则表达式身份证、日期、电话号码等
- 正则表达式,验证身份证,手机号,电话号码,邮箱,邮编,日期,正负数,英文字符串等
- 正则表达式匹配身份证 电话号码 邮箱 住宅电话 邮编等
- 正则表达式匹配身份证 电话号码 邮箱 住宅电话 邮编等
- 时间日期,电话号码正则表达式
- 正则判断身份证,电话号码,邮箱等格式是否正确
- 验证手机,电话号码和身份证的正则表达式
- iOS - 正则表达式判断邮箱、身份证、电话号码...是否正确
- js最新手机号码、电话号码、身份证正则表达式(最新)
- 电话号码 手机号码 等准确详细 正则表达式
- 电话号码 手机号码 等准确详细 正则表达式
- 电话号码 手机号码 等准确详细 正则表达式
- 正则表达式解决邮箱,电话号码等规范
- 手机号码和电话号码等常用正则表达式
- 电话号码等常见的正则表达式
- 电话号码等常见的正则表达式
- 身份证的正则表达式可以验证日期
- JavaScript正则表达式 匹配邮箱、手机号、日期、用户名、密码、身份证等
- Orcad建立层次式原理图
- iOS开发之获取系统键盘的详细信息
- redis命令总结
- 文件下载
- 高逼格的冒泡算法(供面试使用)
- 正则表达式身份证、日期、电话号码等
- ArcGis 创建 FeatureClass
- service
- ApplicationContextAware获取上下文bean
- NETSH WINSOCK RESET CATALOG
- RedHat Enterprise Linux 6.4使用Centos 6 的yum源
- JavaEE与Tomcat发布网页
- LEETCODE 118
- 游戏服务器:到底使用UDP还是TCP