验证身份证号的有效性(仅18位号)
概述
验证身份证号的有效性。这里仅支持18位身份证号的验证,因为15位的身份证号码基本上以及没有了,笔者认为可以忽略。
通过正则表达式来判断。附:正则表达式30分钟入门教程。
下文中用到的正则表达式字符串为"^[1-9][0-9]{5}[1-9][0-9]{3}((0[0-9])|(1[0-2]))(([0|1|2][0-9])|3[0-1])[0-9]{3}([0-9]|X|x)$"
该正则只能简单的判断身份证号码的有效性,笔者对正则表达式也是了解比较浅。
如果有好的建议,希望及时联系我,万分感谢【抱拳】。
Code
源码下载地址,源码中包含各种字符串(手机号、邮箱、中文名、身份证号等)校验方法
+ (BOOL) checkEmptyString:(NSString *) string {
if (string == nil) return string == nil;
NSString *newStr = [string stringByReplacingOccurrencesOfString:@" " withString:@""];
return [newStr isEqualToString:@""];
}
/**
判断是否是有效的身份证号码
@param idCardNo 身份证号字符串
@return 如果是有效的身份证号,返回`YES`, 否则返回`NO`
仅允许 数字 && 最后一位是{数字 || Xx})
*/
+ (BOOL)isVaildIDCardNo:(NSString *)idCardNo
{
if ([MMCheckTool checkEmptyString:idCardNo]) return NO;
NSString *regxStr = @"^[1-9][0-9]{5}[1-9][0-9]{3}((0[0-9])|(1[0-2]))(([0|1|2][0-9])|3[0-1])[0-9]{3}([0-9]|X|x)$";
NSPredicate *idcardTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regxStr];
return [idcardTest evaluateWithObject:idCardNo];
}
Test
//身份证号
{
BOOL a = [MMCheckTool isVaildIDCardNo:@"630121199305286712"];
BOOL b = [MMCheckTool isVaildIDCardNo:@"63012119930528671X"];
BOOL c = [MMCheckTool isVaildIDCardNo:@"63012119930528671x"];
BOOL d = [MMCheckTool isVaildIDCardNo:@"630121299338676712"];
BOOL e = [MMCheckTool isVaildIDCardNo:@"1286090267@qq.com"];
BOOL f = [MMCheckTool isVaildIDCardNo:@"15121178175"];
BOOL g = [MMCheckTool isVaildIDCardNo:@""];
BOOL h = [MMCheckTool isVaildIDCardNo:nil];
NSLog(@"身份证号=====》%d%d%d%d%d%d%d%d",a,b,c,d,e,f,g,h); //打印结果为 11100000
}