身份证号码有效性检测算法 ( js版 转 .net版 )
1 #region 检测是否是正确的身份证 2 /// <summary> 3 /// 身份证验证 4 /// </summary> 5 /// <param name="num"></param> 6 /// <returns></returns> 7 public static bool isIdCardNo(string cardid) 8 { 9 string num = cardid.ToUpper(); 10 int[] factorArr = new int[] { 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1 }; 11 char[] parityBit = new char[] { '1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2' }; 12 char[] varArray = new char[18]; 13 var lngProduct = 0; 14 int intCheckDigit = 0; 15 var intStrLen = num.Length; 16 var idNumber = num; 17 // initialize 18 if ((intStrLen != 15) && (intStrLen != 18)) 19 { 20 return false; 21 } 22 // check and set value 23 24 for (int i = 0; i < intStrLen; i++) 25 { 26 varArray[i] = (char)Convert.ToInt32(idNumber[i]); 27 if (((varArray[i] - 48) < 0 || (varArray[i] - 48) > 9) && (i != 17)) 28 { 29 return false; 30 } 31 else if (i < 17) 32 { 33 varArray[i] = (char)((varArray[i] - 48) * factorArr[i]); 34 } 35 } 36 if (intStrLen == 18) 37 { 38 //check date 39 var date8 = idNumber.Substring(6, 8); 40 if (isDate8(date8) == false) 41 { 42 return false; 43 } 44 // calculate the sum of the products 45 for (int i = 0; i < 17; i++) 46 { 47 lngProduct = lngProduct + varArray[i]; 48 } 49 // calculate the check digit 50 intCheckDigit = parityBit[lngProduct % 11]; 51 // check last digit 52 if (varArray[17] != intCheckDigit) 53 { 54 return false; 55 } 56 } 57 else 58 { //length is 15 59 //check date 60 var date6 = idNumber.Substring(6, 6); 61 if (isDate6(date6) == false) 62 { 63 return false; 64 } 65 } 66 return true; 67 } 68 69 /// <summary> 70 /// 15位身份证日期检测--年/月--6位 71 /// </summary> 72 /// <param name="sDate"></param> 73 /// <returns></returns> 74 static bool isDate6(string sDate) 75 { 76 if (!Regex.IsMatch(sDate, "^[0-9]{6}$")) 77 { 78 return false; 79 } 80 int year, month; 81 year = Convert.ToInt32(sDate.Substring(0, 4)); 82 month = Convert.ToInt32(sDate.Substring(4, 2)); 83 if (year < 1700 || year > 2500) return false; 84 if (month < 1 || month > 12) return false; 85 return true; 86 } 87 88 /// <summary> 89 /// 18位身份证日期检测--年/月/日--8位 90 /// </summary> 91 /// <param name="sDate"></param> 92 /// <returns></returns> 93 static bool isDate8(string sDate) 94 { 95 if (!Regex.IsMatch(sDate, "^[0-9]{8}$")) 96 { 97 return false; 98 } 99 int year, month, day; 100 year = Convert.ToInt32(sDate.Substring(0, 4)); 101 month = Convert.ToInt32(sDate.Substring(4, 2)); 102 day = Convert.ToInt32(sDate.Substring(6, 2)); 103 int[] iaMonthDays = new int[] { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; 104 if (year < 1700 || year > 2500) return false; 105 if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)) iaMonthDays[1] = 29; 106 if (month < 1 || month > 12) return false; 107 if (day < 1 || day > iaMonthDays[month - 1]) return false; 108 return true; 109 } 110 #endregion
javascript版
function isIdCardNo(num) {var factorArr = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1);var parityBit = new Array("1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2");var varArray = new Array();var intValue;var lngProduct = 0;var intCheckDigit;var intStrLen = num.length;var idNumber = num;// initializeif ((intStrLen != 15) && (intStrLen != 18)) {return false;}// check and set valuefor (i = 0; i < intStrLen; i++) {varArray[i] = idNumber.charAt(i);if ((varArray[i] < '0' || varArray[i] > '9') && (i != 17)) {return false;} else if (i < 17) {varArray[i] = varArray[i] * factorArr[i];}}if (intStrLen == 18) {//check datevar date8 = idNumber.substring(6, 14);if (isDate8(date8) == false) {return false;}// calculate the sum of the productsfor (i = 0; i < 17; i++) {lngProduct = lngProduct + varArray[i];}// calculate the check digitintCheckDigit = parityBit[lngProduct % 11];// check last digitif (varArray[17] != intCheckDigit) {return false;}}else { //length is 15//check datevar date6 = idNumber.substring(6, 12);if (isDate6(date6) == false) {return false;}}return true; } function isDate6(sDate) {if (!/^[0-9]{6}$/.test(sDate)) {return false;}var year, month, day;year = sDate.substring(0, 4);month = sDate.substring(4, 6);if (year < 1700 || year > 2500) return falseif (month < 1 || month > 12) return falsereturn true } /** * 判断是否为“YYYYMMDD”式的时期 * */ function isDate8(sDate) {if (!/^[0-9]{8}$/.test(sDate)) {return false;}var year, month, day;year = sDate.substring(0, 4);month = sDate.substring(4, 6);day = sDate.substring(6, 8);var iaMonthDays = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]if (year < 1700 || year > 2500) return falseif (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)) iaMonthDays[1] = 29;if (month < 1 || month > 12) return falseif (day < 1 || day > iaMonthDays[month - 1]) return falsereturn true }
转载于:https://www.cnblogs.com/mahatmasmile/archive/2013/02/05/2893034.html
身份证号码有效性检测算法 ( js版 转 .net版 )相关推荐
- 身份证号码有效性检测算法 ( js版 转 C#版 )
C#版 #region 检测是否是正确的身份证 /// <summary> /// 身份证验证 /// </summary> /// <param name=" ...
- 身份证号码有效性检测
身份证号码有效性检测 在开发软件的时候有些注册需要身份证号等信息,并且要求号码的正确性. 简单的身份证号码有效性检测 - (BOOL)verifyIdentityCardNum {NSString * ...
- Js实现中国公民身份证号码有效性验证
2019独角兽企业重金招聘Python工程师标准>>> 参考: Java实现中国公民身份证号码有效性验证 Php实现中国公民身份证号码有效性验证 本文将使用JavaScript实现中 ...
- 【python】身份证号码有效性校验
1. 前言 中华人民共和国国家标准GB 11643-1999<公民身份号码>中规定:公民身份号码是特征组合码,由17位数字本体码和1位校验码组成. 18位数字组合的方式是: 其中,最后一位 ...
- 请写代码校验第二代身份证号码有效性。程序接收一个18位的身份证号码和性别,根据以下规则输出号码是有效还是无效。
请写代码校验第二代身份证号码有效性.程序接收一个18位的身份证号码和性别,根据以下规则输出号码是有效还是无效. 第二代身份证号组成规则: a) 身份证号码(18位)= 地址码(6)+ 出生日期码(8) ...
- js实现身份证号码有效性验证
//Js获取日期.月初时的前天.昨天.今天.明天 function getDay(day) {var today = new Date();var targetday_milliseconds = t ...
- python 身份证号码有效性验证
先声明以下代码不是全部原创,网上找了前辈的一些代码,经过自己的部分加工,有了如下的身份证有效性验证代码: #!/usr/bin/env python3 # -*- coding: utf-8 -*-i ...
- 在EXCEL中VBA编程检验身份证号码有效性
*2022-12-05 改正代码中错别字,规范表述 *2022-11-30 1.增加了过程clearB()用来清除B1:Bx原有的出错说明,在过程examIdentityCard() 开头调用 2.修 ...
- Python小白入门- 101 ( 工具篇) Python完成身份证号码校验的算法
根据国家标准GB 11643-1999<公民身份证号码>的要求: 身份证号码由18位组成,前17位为数字,最后一位是校验码,可能为数字或字母X.其中,前6位是地区代码,接下来8位是出生日期 ...
最新文章
- Google148亿元收购Fitbit,抢占苹果、三星可穿戴设备市场地盘
- 关于Viual Studio 改变编辑器背景背景及背景图片
- SpringBoot学习之@Configuration注解和@Bean注解
- ALBERT第一作者亲自讲解:Transformer、BERT、ALBERT、XLNet全面解析
- My97DatePicker在asp.net项目中的使用
- [css] 遇到overflow: scroll不能平滑滚动怎么解决?
- Microsoft Team Foundation Server 2010安装指南
- 图像处理:给验证码图片做降噪处理及数据清洗
- 用计算机来猜密码,画圈圈也能解锁电脑?我猜你一定不知道!
- cesium获取点击内容信息_Cesium获取鼠标点击位置(PickPosition)
- 微信扫描二维码后无法打开网页
- 100个在线生信小工具
- HTML:设置背景颜色和图片
- 主成分分析(PCA)及动态主成分分析(Dynamic PCA)模型原理分析
- OpenResty代理CNZZ实现内网访问统计
- N2N V3 安装配置解决方案
- MATLAB画Correlation plots
- 磁盘驱动属于计算机的,计算机基本知识(8005)---HDD(硬盘驱动器Hard Disk Drive)
- Flask框架的学习——04—(模版继承、静态文件的配置、豆瓣APP界面案例实现)
- 企业拼团APP商城开发流程6步曲
热门文章
- HttpClient 详解一《C#高级编程(第9版)》
- ORACLE 培训 -相克军
- JavaScript学习笔记五:变量、作用域和内存问题
- Redis事务和watch
- ORACLE数据库之PL/SQL触发器、rownum、动态SQL、数据库之视图与索引
- CXF wsdl2java 生成java代码供客户端使用
- redis延迟队列 实现_灵感来袭,基于Redis的分布式延迟队列(续)
- 全国计算机等级考试 简称NCRE,长春大学2018年下半年全国计算机等级考试(简称NCRE)招生简章...
- java 最少使用(lru)置换算法_「面试」LRU了解么?看看LinkedHashMap如何实现LRU算法...
- 信息增益有负值吗_一个自动化设备的信息化改造项目,谈谈自动化工程师转型之路—IT融合OT...