做身份证验证的时候要求能够按照标准18位身份证验证,普通正则表达式不能满足需求,所以在网上找到了这个函数,很好用,虽然还是有漏洞,不过一般乱填的号码都能被屏蔽掉

         身份证验证函数(标准18位验证)
private bool CheckIDCard18(string idNumber)
{
long n = ;
if (long.TryParse(idNumber.Remove(), out n) == false
|| n < Math.Pow(, ) || long.TryParse(idNumber.Replace('x', '').Replace('X', ''), out n) == false)
{
return false;//数字验证
}
string address = "11x22x35x44x53x12x23x36x45x54x13x31x37x46x61x14x32x41x50x62x15x33x42x51x63x21x34x43x52x64x65x71x81x82x91";
if (address.IndexOf(idNumber.Remove()) == -)
{
return false;//省份验证
}
string birth = idNumber.Substring(, ).Insert(, "-").Insert(, "-");
DateTime time = new DateTime();
if (DateTime.TryParse(birth, out time) == false)
{
return false;//生日验证
}
string[] arrVarifyCode = ("1,0,x,9,8,7,6,5,4,3,2").Split(',');
string[] Wi = ("7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2").Split(',');
char[] Ai = idNumber.Remove().ToCharArray();
int sum = ;
for (int i = ; i < ; i++)
{
sum += int.Parse(Wi[i]) * int.Parse(Ai[i].ToString());
}
int y = -;
Math.DivRem(sum, , out y);
if (arrVarifyCode[y] != idNumber.Substring(, ).ToLower())
{
return false;//校验码验证
}
return true;//符合GB11643-1999标准
}
private bool CheckIDCard15(string Id) { long n = 0; if (long.TryParse(Id, out n) == false || n < Math.Pow(10, 14)) { return false;//数字验证 } string address = "11x22x35x44x53x12x23x36x45x54x13x31x37x46x61x14x32x41x50x62x15x33x42x51x63x21x34x43x52x64x65x71x81x82x91"; if (address.IndexOf(Id.Remove(2)) == -1) { return false;//省份验证 } string birth = Id.Substring(6, 6).Insert(4, "-").Insert(2, "-"); DateTime time = new DateTime(); if (DateTime.TryParse(birth, out time) == false) { return false;//生日验证 } return true;//符合15位身份证标准 } 函数调用方法
if (!CheckIDCard18(“身份证号”.Text.ToString()) )
{
MessageBox.Show("请输入正确的身份证号码!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return;
}
```
普通正则验证 if ((!Regex.IsMatch(txt_IdCard.Text, @"^(\d{15}$|^\d{18}$|^\d{17}(\d|X|x))$", RegexOptions.IgnoreCase)))
{
MessageBox.Show("请输入正确的身份证号码!", "提示",MessageBoxButtons.OK, MessageBoxIcon.Warning);
return;
}

最好将普通正则验证放在函数验证之前,节约资源!

最新文章

  1. Python学习笔记08
  2. java高薪之路__001_类
  3. Effective Java 16 Favor composition over inheritance
  4. java中的递归方法
  5. JavaScript 对象 - 与属性的相关知识
  6. java实现xml文件增删改查
  7. Android 全屏方法
  8. yii2.0 面包屑的使用
  9. JS源生代码“增删改查”之增
  10. HDU 4193 Non-negative Partial Sums(想法题,单调队列)
  11. ES6之let命令
  12. 从零开始学安全(四十六)●sqli-labs 1-4关 涉及的知识点
  13. Rabbitmq 安装后采坑
  14. docker启动容器报错: could not synchronise with container process: not a directory
  15. 宝塔面板Windows 面板5.0 memcache安装
  16. Linux环境nginx的配置
  17. 缓慢变化维 (Slowly Changing Dimension) 常见的三种类型及原型设计(转)
  18. Java多线程之使用ATM与柜台对同一账户取钱
  19. jwt的ASP.NET MVC 身份验证
  20. 498_Diagonal-Traverse

热门文章

  1. RMQ 的入门 hdu1806
  2. Windows下的vue-devtools工具的安装
  3. EasyUI之DataGrid分页
  4. VUE搭建脚手架CLI
  5. iOS开发-retain/assign/strong/weak/copy/mutablecopy/autorelease区别
  6. tomcat启动报错:Neither the JAVA_HOME nor the JRE_HOME environment variable is defined
  7. tenorflow 模型调优
  8. bzoj2325 [ZJOI2011]道馆之战 树链剖分+DP+类线段树最大字段和
  9. 浅谈Java集合体系及底层实现原理
  10. 前端之form表单与css(1)