using System;
/// <summary>
/// Summary description for IDCardValid
/// </summary>
public class IDCardValid
{
public IDCardValid()
{
//
// TODO: Add constructor logic here
//
}
/// <summary>
/// 验证身份证号码
/// </summary>
/// <param name="Id">身份证号码</param>
/// <returns>验证成功为True,否则为False</returns>
public static bool CheckIDCard(
string Id)
{
if (Id.Length == 18)
{
bool check = CheckIDCard18(Id);
return check;
}
else if (Id.Length == 15)
{
bool check = CheckIDCard15(Id);
return check;
}
else
{
return false;
}
}
#region 身份证号码验证
/// <summary>
/// 验证15位身份证号
/// </summary>
/// <param name="Id">身份证号</param>
/// <returns>验证成功为True,否则为False</returns>
private static bool CheckIDCard18(
string Id)
{
long n = 0;
if (
long.TryParse(Id.Remove(17),
out n) ==
false || n < Math.Pow(10, 16) ||
long.TryParse(Id.Replace(
'x',
'0').Replace(
'X',
'0'),
out n) ==
false)
{
return false;
//数字验证
}
string address =
"11x22x35x44x53x12x23x36x45x54x13x31x37x46x61x14x32x41x50x62x15x33x42x51x63x21x34x43x52x64x65x71x81x82x91";
if (address.IndexOf(Id.Remove(2)) == -1)
{
return false;
//省份验证
}
string birth = Id.Substring(6, 8).Insert(6,
"-").Insert(4,
"-");
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 = Id.Remove(17).ToCharArray();
int sum = 0;
for (
int i = 0; i < 17; i++)
{
sum +=
int.Parse(Wi[i]) *
int.Parse(Ai[i].ToString());
}
int y = -1;
Math.DivRem(sum, 11,
out y);
if (arrVarifyCode[y] != Id.Substring(17, 1).ToLower())
{
return false;
//校验码验证
}
return true;
//符合GB11643-1999标准
}
/// <summary>
/// 验证18位身份证号
/// </summary>
/// <param name="Id">身份证号</param>
/// <returns>验证成功为True,否则为False</returns>
private static 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位身份证标准
}
#endregion
}
分享到:
相关推荐
身份证号码验证示例源码 <br>中国身份证号码验证,支持15,18位,可验证成功90%的身份证号 利用正则进行身份证算法验证 <br>非常不错
asp.net 中国身份证号码验证,需要的朋友可以参考下。
c#常用控件格式验证-身份证号码电话号码邮箱地址格式日期格式等。
C#中国身份证验证,包括省份验证和校验码验证,符合GB11643-1999标准
主要介绍了JS实现中国公民身份证号码有效性验证,非常不错,具有参考借鉴价值,需要的朋友可以参考下
3.身份证验证根据用户提供的身份证信判断出省市,然后在判断....做到只能输入 正确的省份证信息才可以.... 判断身份证的方法比使用正则表达式更加准确详细请看 js中的 checkidcard.js 判断省份证的 js function ...
一个很简单的基于API的vb小程序.没什么技术含量. 可以计算身份证的最后一位数.或者验证一下身份证号是否伪造(很初级的验证,没有数据库)
C#中国身份证验证,包括省份验证和校验码验证,符合GB11643-1999标准.doc
主要介绍了Js实现中国公民身份证号码有效性验证实例代码,可以识别身份证号码的正确性,有兴趣的可以了解一下
公民身份号码是由17位数字码和1位校验码组成。排列顺序从左至右分别为:6位地址码,8位出生日期码,3位顺序码和1位校验码。 地址码(身份证地址码对照表见...身份证号码解密|身份证尾数校验码算法|ID card information
18位身份证号码=6位地区代码+8位生日+3位编号+1位检验码 公民身份号码是特征组合码,由十七位数字本体码和一位校验码组成。排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位校验...
主要介绍了jquery 校验中国身份证号码实例详解的相关资料,需要的朋友可以参考下
主要介绍了PHP实现中国公民身份证号码有效性验证示例代码,可以判断身份证号码的正确性,非常具有实用价值
根据中国公民身份证号码算法 实现验证身份证号码合法性 已实现java类函数 可直接调用即可 非常方便实用
正则表达式(regular expression)是一个描述字符模式的对象。下面通过本篇文章给大家介绍js正则表达式验证身份证号码是否合法,需要的朋友可以参考下本
IdValidator 中国大陆用户身份证校验
中国居民身份证编号规则验证及升级二代号码源码(不含合法性验证)
验证中国大陆居民身份证、港澳居民居住证以及台湾地区居民居住证
身份证号校验器是一个可以用来验证身份证号码是否有效的验证工具。 特点: 1、支持批量输入验证 2、支持从数据库读取验证 3、支持SQL SERVER 4、支持ORACLE 根据〖中华人民共和国国家标准 GB 11643-1999〗中有关...