iOS 常用正则校验
2016-04-05 18:30
274 查看
//校验密码
+(BOOL)checkPass:(NSString*)pass
{
if(pass==nil)
{
return NO;
}
NSString *regex = @"^[A-Za-z0-9]+$";
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@ AND SELF.length > 5 AND SELF.length < 17", regex];
return [predicate evaluateWithObject:pass];
}
//校验电话号码
+(BOOL)checkIsPhone:(NSString*)str
{
NSString *regex = @"(13[0-9]|14[57]|15[0123456789]|18[023456789])\\d{8}";
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex];
return [predicate evaluateWithObject:str];
}
//校验是否是数字
+(BOOL)checkIsNumber:(NSString*)str
{
if(str==nil)
{
return NO;
}
NSString *regex = @"^(([0-9]+\\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\\.[0-9]+)|([0-9]*[1-9][0-9]*))$";//@"^[0-9]+$";
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@ ", regex];
return [predicate evaluateWithObject:str];
}
[objc] view
plain copy
//身份证号
+ (BOOL)CheckIsIdentityCard: (NSString *)identityCard
{
//判断是否为空
if (identityCard==nil||identityCard.length <= 0) {
return NO;
}
//判断是否是18位,末尾是否是x
NSString *regex2 = @"^(\\d{14}|\\d{17})(\\d|[xX])$";
NSPredicate *identityCardPredicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",regex2];
if(![identityCardPredicate evaluateWithObject:identityCard]){
return NO;
}
//判断生日是否合法
NSRange range = NSMakeRange(6,8);
NSString *datestr = [identityCard substringWithRange:range];
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat : @"yyyyMMdd"];
if([formatter dateFromString:datestr]==nil){
return NO;
}
//判断校验位
if(identityCard.length==18)
{
NSArray *idCardWi= @[ @"7", @"9", @"10", @"5", @"8", @"4", @"2", @"1", @"6", @"3", @"7", @"9", @"10", @"5", @"8", @"4", @"2" ]; //将前17位加权因子保存在数组里
NSArray * idCardY=@[ @"1", @"0", @"10", @"9", @"8", @"7", @"6", @"5", @"4", @"3", @"2" ]; //这是除以11后,可能产生的11位余数、验证码,也保存成数组
int idCardWiSum=0; //用来保存前17位各自乖以加权因子后的总和
for(int i=0;i<17;i++){
idCardWiSum+=[[identityCard substringWithRange:NSMakeRange(i,1)] intValue]*[idCardWi[i] intValue];
}
int idCardMod=idCardWiSum%11;//计算出校验码所在数组的位置
NSString *idCardLast=[identityCard substringWithRange:NSMakeRange(17,1)];//得到最后一位身份证号码
//如果等于2,则说明校验码是10,身份证号码最后一位应该是X
if(idCardMod==2){
if([idCardLast isEqualToString:@"X"]||[idCardLast isEqualToString:@"x"]){
return YES;
}else{
return NO;
}
}else{
//用计算出的验证码与最后一位身份证号码匹配,如果一致,说明通过,否则是无效的身份证号码
if([idCardLast intValue]==[idCardY[idCardMod] intValue]){
return YES;
}else{
return NO;
}
}
}
return NO;
}
+(BOOL)checkPass:(NSString*)pass
{
if(pass==nil)
{
return NO;
}
NSString *regex = @"^[A-Za-z0-9]+$";
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@ AND SELF.length > 5 AND SELF.length < 17", regex];
return [predicate evaluateWithObject:pass];
}
//校验电话号码
+(BOOL)checkIsPhone:(NSString*)str
{
NSString *regex = @"(13[0-9]|14[57]|15[0123456789]|18[023456789])\\d{8}";
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex];
return [predicate evaluateWithObject:str];
}
//校验是否是数字
+(BOOL)checkIsNumber:(NSString*)str
{
if(str==nil)
{
return NO;
}
NSString *regex = @"^(([0-9]+\\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\\.[0-9]+)|([0-9]*[1-9][0-9]*))$";//@"^[0-9]+$";
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@ ", regex];
return [predicate evaluateWithObject:str];
}
[objc] view
plain copy
//身份证号
+ (BOOL)CheckIsIdentityCard: (NSString *)identityCard
{
//判断是否为空
if (identityCard==nil||identityCard.length <= 0) {
return NO;
}
//判断是否是18位,末尾是否是x
NSString *regex2 = @"^(\\d{14}|\\d{17})(\\d|[xX])$";
NSPredicate *identityCardPredicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",regex2];
if(![identityCardPredicate evaluateWithObject:identityCard]){
return NO;
}
//判断生日是否合法
NSRange range = NSMakeRange(6,8);
NSString *datestr = [identityCard substringWithRange:range];
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat : @"yyyyMMdd"];
if([formatter dateFromString:datestr]==nil){
return NO;
}
//判断校验位
if(identityCard.length==18)
{
NSArray *idCardWi= @[ @"7", @"9", @"10", @"5", @"8", @"4", @"2", @"1", @"6", @"3", @"7", @"9", @"10", @"5", @"8", @"4", @"2" ]; //将前17位加权因子保存在数组里
NSArray * idCardY=@[ @"1", @"0", @"10", @"9", @"8", @"7", @"6", @"5", @"4", @"3", @"2" ]; //这是除以11后,可能产生的11位余数、验证码,也保存成数组
int idCardWiSum=0; //用来保存前17位各自乖以加权因子后的总和
for(int i=0;i<17;i++){
idCardWiSum+=[[identityCard substringWithRange:NSMakeRange(i,1)] intValue]*[idCardWi[i] intValue];
}
int idCardMod=idCardWiSum%11;//计算出校验码所在数组的位置
NSString *idCardLast=[identityCard substringWithRange:NSMakeRange(17,1)];//得到最后一位身份证号码
//如果等于2,则说明校验码是10,身份证号码最后一位应该是X
if(idCardMod==2){
if([idCardLast isEqualToString:@"X"]||[idCardLast isEqualToString:@"x"]){
return YES;
}else{
return NO;
}
}else{
//用计算出的验证码与最后一位身份证号码匹配,如果一致,说明通过,否则是无效的身份证号码
if([idCardLast intValue]==[idCardY[idCardMod] intValue]){
return YES;
}else{
return NO;
}
}
}
return NO;
}
相关文章推荐
- 【ios学习记录】- 通过nib文件实现自定义表视图单元
- iOS中几种定时器
- iOS设计之--OC学习总结之延展类目协议
- iOS开发之runtime详解
- iOS didReceiveMemoryWarning 内存警告 调试详解
- 【iOS】self与block的使用规范
- ios开发打电话,发短信,打开网址
- 【iOS】程序中获取应用的信息
- Nagios监控工具
- iOS 9学习系列:如何使用ATS提高应用的安全性
- iOS知识----获取HTML5 的 标题(title)
- iOS复制到剪接版
- iOS获取设备IP地址
- iOS开发-视图控制器相关
- iOS有关图片处理 图片的饱和度,亮度,对比度
- iOS:json格式字符串转字典,字典转json格式字符串
- IOS总结_#define宏定义在IOS开发中的具体使用
- iOS layoutSubviews等方法用法,view加载用法
- iOS苹果的定位
- iOS 宏(define)与常量(const)的正确使用