iOS驗證身份證號的有效性(僅18位號)
阿新 • • 發佈:2019-02-20
驗證身份證號的有效性(僅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:@"[email protected]"];
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
}