身份证号码有效性检测

在开发软件的时候有些注册需要身份证号等信息,并且要求号码的正确性。

简单的身份证号码有效性检测


- (BOOL)verifyIdentityCardNum {NSString *regex2 = @"^(\\d{14}|\\d{17})(\\d|[xX])$";return [self q_isValidateByRegex:regex2];
}

精确的身份证号码有效性检测

- (BOOL)verifyIdentityCardNum {NSString *value = [self stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];int length =0;if (!value) {return NO;} else {length = (int)value.length;if (length !=15 && length !=18) {return NO;}}// 省份代码NSArray *areasArray =@[@"11",@"12", @"13",@"14", @"15",@"21", @"22",@"23", @"31",@"32", @"33",@"34", @"35",@"36", @"37",@"41", @"42",@"43", @"44",@"45", @"46",@"50", @"51",@"52", @"53",@"54", @"61",@"62", @"63",@"64", @"65",@"71", @"81",@"82", @"91"];NSString *valueStart2 = [value substringToIndex:2];BOOL areaFlag =NO;for (NSString *areaCode in areasArray) {if ([areaCode isEqualToString:valueStart2]) {areaFlag =YES;break;}}if (!areaFlag) {return false;}NSRegularExpression *regularExpression;NSUInteger numberofMatch;int year =0;switch (length) {case 15:year = [value substringWithRange:NSMakeRange(6,2)].intValue +1900;if (year %4 ==0 || (year %100 ==0 && year %4 ==0)) {// 测试出生日期的合法性regularExpression = [[NSRegularExpression alloc] initWithPattern:@"^[1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}$"options:NSRegularExpressionCaseInsensitiveerror:nil];} else {// 测试出生日期的合法性regularExpression = [[NSRegularExpression alloc]initWithPattern:@"^[1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}$"options:NSRegularExpressionCaseInsensitiveerror:nil];}numberofMatch = [regularExpression numberOfMatchesInString:valueoptions:NSMatchingReportProgressrange:NSMakeRange(0, value.length)];if (numberofMatch >0) {return YES;} else {return NO;}case 18:year = [value substringWithRange:NSMakeRange(6,4)].intValue;if (year %4 ==0 || (year %100 ==0 && year %4 ==0)) {// 测试出生日期的合法性regularExpression = [[NSRegularExpression alloc] initWithPattern:@"^[1-9][0-9]{5}19[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}[0-9Xx]$"options:NSRegularExpressionCaseInsensitiveerror:nil];} else {// 测试出生日期的合法性regularExpression = [[NSRegularExpression alloc] initWithPattern:@"^[1-9][0-9]{5}19[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}[0-9Xx]$"options:NSRegularExpressionCaseInsensitiveerror:nil];}numberofMatch = [regularExpression numberOfMatchesInString:valueoptions:NSMatchingReportProgressrange:NSMakeRange(0, value.length)];if (numberofMatch > 0) {int S = ([value substringWithRange:NSMakeRange(0, 1)].intValue +[value substringWithRange:NSMakeRange(10, 1)].intValue) * 7 +([value substringWithRange:NSMakeRange(1, 1)].intValue +[value substringWithRange:NSMakeRange(11, 1)].intValue) * 9 +([value substringWithRange:NSMakeRange(2, 1)].intValue +[value substringWithRange:NSMakeRange(12, 1)].intValue) * 10 +([value substringWithRange:NSMakeRange(3, 1)].intValue +[value substringWithRange:NSMakeRange(13, 1)].intValue) * 5 +([value substringWithRange:NSMakeRange(4, 1)].intValue +[value substringWithRange:NSMakeRange(14, 1)].intValue) * 8 +([value substringWithRange:NSMakeRange(5, 1)].intValue +[value substringWithRange:NSMakeRange(15, 1)].intValue) * 4 +([value substringWithRange:NSMakeRange(6, 1)].intValue +[value substringWithRange:NSMakeRange(16, 1)].intValue) * 2 +[value substringWithRange:NSMakeRange(7, 1)].intValue * 1 +[value substringWithRange:NSMakeRange(8, 1)].intValue * 6 +[value substringWithRange:NSMakeRange(9, 1)].intValue * 3;int Y = S % 11;NSString *M =@"F";NSString *JYM =@"10X98765432";M = [JYM substringWithRange:NSMakeRange(Y,1)];  // 判断校验位if ([M isEqualToString:[value substringWithRange:NSMakeRange(17,1)]]) {return YES;                                 // 检测 ID 的校验位} else {return NO;}} else {return NO;}default:return NO;}
}

银行卡号、ip 地址、车牌号等等正则会持续更新上去。

身份证号码有效性检测相关推荐

  1. 身份证号码有效性检测算法 ( js版 转 .net版 )

    1 #region 检测是否是正确的身份证 2 /// <summary> 3 /// 身份证验证 4 /// </summary> 5 /// <param name= ...

  2. 身份证号码有效性检测算法 ( js版 转 C#版 )

    C#版 #region 检测是否是正确的身份证 /// <summary> /// 身份证验证 /// </summary> /// <param name=" ...

  3. Js实现中国公民身份证号码有效性验证

    2019独角兽企业重金招聘Python工程师标准>>> 参考: Java实现中国公民身份证号码有效性验证 Php实现中国公民身份证号码有效性验证 本文将使用JavaScript实现中 ...

  4. 【python】身份证号码有效性校验

    1. 前言 中华人民共和国国家标准GB 11643-1999<公民身份号码>中规定:公民身份号码是特征组合码,由17位数字本体码和1位校验码组成. 18位数字组合的方式是: 其中,最后一位 ...

  5. 请写代码校验第二代身份证号码有效性。程序接收一个18位的身份证号码和性别,根据以下规则输出号码是有效还是无效。

    请写代码校验第二代身份证号码有效性.程序接收一个18位的身份证号码和性别,根据以下规则输出号码是有效还是无效. 第二代身份证号组成规则: a) 身份证号码(18位)= 地址码(6)+ 出生日期码(8) ...

  6. python 身份证号码有效性验证

    先声明以下代码不是全部原创,网上找了前辈的一些代码,经过自己的部分加工,有了如下的身份证有效性验证代码: #!/usr/bin/env python3 # -*- coding: utf-8 -*-i ...

  7. 在EXCEL中VBA编程检验身份证号码有效性

    *2022-12-05 改正代码中错别字,规范表述 *2022-11-30 1.增加了过程clearB()用来清除B1:Bx原有的出错说明,在过程examIdentityCard() 开头调用 2.修 ...

  8. MATLAB身份证号码定位检测识别GUI

    ​ 一.应用背景 随着信息时代的飞速发展,身份证作为人口信息行之有效的管理工具,已经深入到社会生活的方方面面.身份证是我国居民身份的象征,独一无二的身份证号码录入了公民的基本个人信息.出于保障公民的合 ...

  9. 身份证号码有效性验证

    结构和形式 号码的结构 公民身份号码是特征组合码,由十七位数字本体码和一位校验码组成.排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码. 地址码 表示编码对象 ...

最新文章

  1. cordova编译报错:Execution failed for task ':processDebugResources'
  2. VMware vMotion 配置要求
  3. mysql需要vc_VC连接MySql
  4. 用服务器控件在后台调用前台客户端JS方法
  5. 关于db link权限分配的苦旅(一)
  6. 在 ASP.NET Core 中安装 MVC
  7. JavaScript将负数转换为正数
  8. 任务管理器只有概要信息解决办法
  9. matlabrobert锐化_基于Matlab的图像锐化的研究
  10. (20)Xilinx PCIE中断调试成功(学无止境)
  11. 应用实例_兴达奇智能燃烧控制器BMU460DP现场应用实例图
  12. 数据结构上机实践第八周项目3-顺序串算法
  13. MySQL学习4 数据过滤
  14. creo绘图属性模板_creo完整制作工程图模板.docx
  15. 2010年计算机专业考研大纲解析
  16. 流程图用什么软件做?好用的流程图软件盘点
  17. ST芯片烧录失败的原因分析及对策
  18. 天使投资人给创业者的一封信
  19. 2022城市辅助驾驶赛道陷入“三国争霸”,数据智能助力毫末智行杀出重围?
  20. Mysql学习日记:L13-distinct关键字

热门文章

  1. mac 自定义快捷键
  2. DirectX12 3D游戏开发实践(龙书)第四章 Direct3D的初始化
  3. Altium Designer 18 如何导出 3D模型的PDF
  4. 我奋斗 我迷茫 但我会继续奋斗
  5. android进销存系统
  6. PhotoShop CC 2017软件工具面板使用---裁剪工具
  7. MYIR-ZYNQ7000系列-zturn教程(23):DMA回环测试
  8. 我希望你帮我开发一个具有显微镜的软件
  9. SOCK_RAW 实现ICMP路由追踪
  10. 计算机网络——ICMP询问报文