频道栏目
首页 > 程序开发 > 综合编程 > 其他综合 > 正文
C# 身份证号码15位和18位验证 - 梵音2019 - 博客园
2019-05-25 20:02:58         来源:梵音2019  
收藏   我要投稿

C# 身份证号码15位和18位验证
///
///身份证
///
[Serializable]
publicclassIDCard
{
///
///身份证号
///
publicstringIDCardNum{get;set;}
///
///行政区
///
publicstringCanton{get;privateset;}
///
///出生日期
///
publicDateTimeBirthday{get;privateset;}
///
///性别(0-女;1-男)
///
publicintGander{get;privateset;}
///
///是否为合法身份证号
///
publicboolIsIDCard{get;privateset;}
 
publicIDCard(){}
 
publicIDCard(stringIDnumber)
{
this.IDCardNum=IDnumber;
}
 
 
///
///
///
///
///
publicstaticIDCardParse(stringnumber)
{
IDCardidCard=newIDCard(number);
 
constints5bits=15;
constints8bits=18;
 
#region15位
if(number.Length==s5bits)//15位的处理
{
//检查输入是否为数字
for(inti=0;i'9'))
{
thrownewFormatException("身份证号错误");
}
}
 
//出生日期
stringbirthday="19"+number.Substring(6,6);
stringyear=birthday.Substring(0,4);
stringmonth=birthday.Substring(4,2);
stringday=birthday.Substring(6,2);
birthday=string.Format("{0}-{1}-{2}",year,month,day);
 
DateTimedate=newDateTime();
if(DateTime.TryParse(birthday,outdate))
{
idCard.Birthday=date;
}
else
{
thrownewInvalidCastException("身份证号出生日期错误");
}

//性别
if((number[s5bits-1]=='0')||(number[s5bits-1]%2==0))
{
idCard.Gander=0;//女
}
else
{
idCard.Gander=1;//男
}
 
idCard.IsIDCard=true;
returnidCard;
}
#endregion
 
#region18位
elseif(number.Length==s8bits)//18位的处理
{
//检查前17位是否为数字
for(inti=0;i'9'))
{
thrownewFormatException("身份证号错误");
}
}
 
charend=number[s8bits-1];//最后一位
 
//最后1位是x转成大写X
if(end=='x')
{
end='X';
number=number.Substring(0,s8bits-1)+end;
}
 
if(!(end=='X'||(end>='0'&&end<='9')))
{
thrownewFormatException("身份证号错误");
}

///校验
intnum=0;
charproof;
for(inti=17;i>0;i--)
{
num=num+(int)(Math.Pow(2,i)%11)*(number[17-i]-48);
}
num%=11;
switch(num)
{
case0:
proof='1';
break;
case1:
proof='0';
break;
case2:
proof='X';
break;
default:
proof=(char)(12-num+48);
break;
}
 
if(end!=proof)//最后一位与校验码不符
{
thrownewFormatException("身份证号错误");
}
 
//出生日期
stringbirthday=number.Substring(6,8);
stringyear=birthday.Substring(0,4);
stringmonth=birthday.Substring(4,2);
stringday=birthday.Substring(6,2);
birthday=string.Format("{0}-{1}-{2}",year,month,day);
 
DateTimedate=newDateTime();
if(DateTime.TryParse(birthday,outdate))
{
idCard.Birthday=date;
}
else
{
thrownewInvalidCastException("身份证号出生日期错误");
}
 
//行政区
idCard.Canton=number.Substring(0,6);
 
//性别
if((number[16]=='0')||(number[16]%2==0))
{
idCard.Gander=0;//女
}
else
{
idCard.Gander=1;//男
}
 
idCard.IsIDCard=true;
returnidCard;
}
#endregion
else
{
thrownewFormatException("无效的身份证号码位数:"+number.Length);
}
}
 
publicstaticboolTryParse(stringnumber,outIDCardcard)
{
IDCardidCard=null;
boolisIdCard=true;
try
{
Parse(number);
}
catch(Exception)
{
isIdCard=false;
}
card=idCard;
returnisIdCard;
}
}

点击复制链接 与好友分享!回本站首页
相关TAG标签 - - 博客园
上一篇:如何使用pyinstaller打包32位的exe - 小friend - 博客园
下一篇:[NOI2006] 神奇口袋 - nosta - 博客园
相关文章
图文推荐
点击排行

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站