C#实现身份证号码验证的方法
本文实例讲述了C#实现身份证号码验证的方法。分享给大家供大家参考。具体实现方法如下:
随着现在互联网的发展,越来越多的注册用户的地方都用到了身份证,那么对于输入的身份证如何验证呢?看下面的代码,其实很简单。
主要注意的是,目前的身份证分为16和18位,然后分别验证校验位,省份,生日即可。
主要类如下:
/// <summary>
/// 验证身份证号码类
/// </summary>
public class IDCardValidation
{
/// <summary>
/// 验证身份证合理性
/// </summary>
/// <param name="Id"></param>
/// <returns></returns>
public bool CheckIDCard(string idNumber)
{
if (idNumber.Length == )
{
bool check = CheckIDCard18(idNumber);
return check;
}
else if (idNumber.Length == )
{
bool check = CheckIDCard15(idNumber);
return check;
}
else
{
return false;
}
} /// <summary>
/// 18位身份证号码验证
/// </summary>
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标准
} /// <summary>
/// 16位身份证号码验证
/// </summary>
private bool CheckIDCard15(string idNumber)
{
long n = ;
if (long.TryParse(idNumber, out n) == false || n < Math.Pow(, ))
{
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;//生日验证
}
return true;
}
} 测试调用: 复制代码 代码如下: IDCardValidation card = new IDCardValidation(); //从网上身份证大全找来的,验证结果为true
bool result = card.CheckIDCard(""); Console.WriteLine(result.ToString());
//随便编的,验证结果为false
result = card.CheckIDCard(""); Console.WriteLine(result.ToString()); Console.ReadLine();
测试调用:
测试调用:
IDCardValidation card = new IDCardValidation(); //从网上身份证大全找来的,验证结果为true
bool result = card.CheckIDCard(""); Console.WriteLine(result.ToString());
//随便编的,验证结果为false
result = card.CheckIDCard(""); Console.WriteLine(result.ToString()); Console.ReadLine();
C#实现身份证号码验证的方法的更多相关文章
- js正则实现二代身份证号码验证详解
js正则实现二代身份证号码验证详解 根据[中华人民共和国国家标准 GB 11643-1999]中有关公民身份号码的规定,公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成.排列顺序从左至 ...
- 是否以某字符串结尾 是否以某字符串开始 是否是整数 裁减字符串空格 是否是浮点数 是否所有字符为数字类型 是否为空 是否是EMAIL 是否是电话号码 身份证号码验证-支持新的带x身份证 日期验证
/* 1.是否以某字符串结尾 endsWith(theStr,endStr) @param theStr:要判断的字符串 @param endStr:以此字符串结尾 @return boolean; ...
- Java 身份证号码验证
身份证号码验证 1.号码的结构 公民身份号码是特征组合码,由十七位数字本体码和一位校验码组成.排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码 2.地址码(前 ...
- C#后台验证身份证号码的一个方法
简单的调用了正则表达式进行简单的验证,记下来留着以后备用 if ((!Regex.IsMatch(txtID.Text, @"^(^\d{15}$|^\d{18}$|^\d{17}(\d|X ...
- Javascript身份证号码验证
"来来来,坐这儿". "什么?我可是有身份的人,怎么能和你坐一块儿".沛笠晃了晃手里的身份证,不屑说道. "你咋不上天呢?有身份还喝油条吃豆浆&quo ...
- C# 身份证号码验证正则和验证函数
做身份证验证的时候要求能够按照标准18位身份证验证,普通正则表达式不能满足需求,所以在网上找到了这个函数,很好用,虽然还是有漏洞,不过一般乱填的号码都能被屏蔽掉 身份证验证函数(标准18位验证) pr ...
- js身份证号码验证(小程序版)
参考知乎专栏文章https://zhuanlan.zhihu.com/p/22949023 <view class='bgw'> <form> ...... <view ...
- js实现身份证号码验证
/*根据[中华人民共和国国家标准 GB 11643-1999]中有关公民身份号码的规定,公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成.排列顺序从左至右依次为:六位数字地址码,八位数 ...
- PHP根据身份证号码验证、获取星座、生肖和性别函数
首先介绍一下身份证含义 新的18位身份证号码各位的含义:1-2位省.自治区.直辖市代码:3-4位地级市.盟.自治州代码:5-6位县.县级市.区代码:7-14位出生年月日,比如19670401代表196 ...
随机推荐
- 【风马一族_xml】xmlp之dtd1
什么是XML约束? 在xml技术里,可以编写一个文档来约束一个xml文档的写法,这称之为xml约束 2. 为什么要使用xml约束? 参看提示栏 3. xml约束的作用? 约束xml的写法 对xml进行 ...
- linux系统启动流程
BIOS: (Basic Input Output System)基本输入输出系统,一般保存在主板上的BIOS芯片中 BIOS是计算机启动时运行的第一个程序,负责检查硬件并且查找可启动设备. 可启动设 ...
- Silverlight通过Wcf Data Service访问数据库之ADO.NET Entity Framework篇
- C# WinForm设置TreeView选中节点
这里假定只有两级节点,多级方法类似.遍历节点,根据选中节点文本找到要选中的节点.treeView.SelectedNode = selectNode; /// <summary> /// ...
- JavaScript 中的 replace 方法
定义和用法 replace() 方法用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串. stringObject.replace(regexp/substr,replaceme ...
- mercurial(hg)使用
# 版本管理软件的比较 svn 每个目录下建一个.svn目录实在是不爽. git 分支管理非常方便,但没感觉有什么用,主要还是在修改前提交一次代码, 等后悔时再回来,没什么其他的目的.关键是中文乱码问 ...
- uploadify 上传
本来想做一套上传公用的组建的,里面包含文件转码等功能,看来这些都只能后来一步一步加上了,先写下来... 1,引入脚本等 @{ Layout = null; } <!DOCTYPE html> ...
- 2.opencv图像处理常用操作
图像的平滑处理 平滑,也称 模糊, 平滑处理时需要用到一个滤波器 .滤波器想象成一个包含加权系数的窗口,这个加权系数也叫做核或者模版. // 图像平滑处理分而学之.cpp : 定义控制台应用程序的入口 ...
- require.js入门指南(二)
*:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !important; } /* ...
- glibc学习介绍篇
C语言自身并没有提供IO,内存管理,字符串操作等类似的机制.作为弥补,C语言有一个标准库帮助C语言实现这些机制.我们在编译C程序的时候基本上都需要链接到这些库文件. GNU C Library定义IS ...