iOS 台湾身份证校验
最近由于项目需要提供一个台湾版本,其中涉及到实名认证部分。由于台湾无法使用芝麻认证,只能通过校验规则来判断了。综合网上一些资料,整理了一个方法,记录以便使用。台湾的身份证号码是10位,第一位是字母,第二位数字代表男女,后八位随机数,最后一位是用于校验身份证是否有效。
/**判断台湾身份证是否有效@param str 传入的身份证号@return 身份证是否有效*/
+ (BOOL)isValidateIDCard:(NSString *)str {NSString *idcard = @"^[a-zA-Z][0-9]{9}$";NSPredicate *regextestmobile = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", idcard];BOOL firstStep = [regextestmobile evaluateWithObject:str];if (!firstStep) {return firstStep;} else {NSDictionary *firstCodeDict = @{@"A": @10, @"B": @11, @"C": @12, @"D": @13, @"E": @14,@"F": @15, @"G": @16, @"H": @17, @"J": @18, @"K": @19,@"L": @20, @"M": @21, @"N": @22, @"P": @23, @"Q": @24,@"R": @25, @"S": @26, @"T": @27, @"U": @28, @"V": @29,@"X": @30, @"Y": @31, @"Z": @32, @"W": @33, @"I": @34,@"O": @35, };NSString *first = [[str substringWithRange:NSMakeRange(0, 1)] uppercaseString];NSString *mid = [str substringWithRange:NSMakeRange(1, 8)];NSString *end = [str substringWithRange:NSMakeRange(9, 1)];NSInteger firstCodeValue = [[firstCodeDict objectForKey:first] integerValue];NSInteger sum = firstCodeValue / 10 + (firstCodeValue % 10) * 9;NSMutableArray *arr = [NSMutableArray arrayWithCapacity:0];[mid enumerateSubstringsInRange:NSMakeRange(0, mid.length) options:NSStringEnumerationByComposedCharacterSequences usingBlock:^(NSString *substring, NSRange substringRange, NSRange enclosingRange, BOOL *stop) {[arr addObject:substring];}];for (NSInteger i = 8; i > 0; i--) {NSInteger index = [arr[8 - i] integerValue];sum = sum + index * i;}return (sum % 10 == 0 ? 0 : (10 - sum % 10)) == [end integerValue] ? YES : NO;}
}
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
