1. 程式人生 > >iOS驗證身份證號的有效性(僅18位號)

iOS驗證身份證號的有效性(僅18位號)

驗證身份證號的有效性(僅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
}

這裡寫圖片描述