C#:身份证检验码,性别以及地区生日
private bool CheckIDCard(string idNumber)//判断位数和校验码
{
int n = idNumber.ToCharArray().Length;
if (n != 18)
{
return false;
}
string[] Code = ("1,0,x,9,8,7,6,5,4,3,2").Split(',');//校验码字符值Ai的顺序
string[] Wi = ("7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2").Split(',');//加权因子
char[] Ai = idNumber.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 = sum % 11;//计算余数用来找校验码
if (Code[y] != idNumber.Substring(17, 1).ToLower())//判断输入的校验码是否和计算出来的校验码相同
{
return false;//校验码验证
}
return true;
}
private string GetSex(string number)//判断性别
{
string sexnum = number.Substring(number.Length - 4, 3);
int num = int.Parse(sexnum);
if (num % 2 == 0)
return "女";
else
return "男";
}
private string Getarea(string iccardno)//查询地区
{
string strMessage = "";
string strSQL = "select 全称 FROM [Check_CardID].[dbo].[地区代码表]where 身份证前6位 = '" + iccardno + "'";
DataTable dt = Global.dbHelp.GetDataTablebySQL(strSQL, out strMessage);
if (dt == null) //数据库访问出错
{
return strMessage;
}
if (dt.Rows.Count < 1) //返回的是空表,说明前六位有错误
{
strMessage = "没有该用户!";
return strMessage;
}
//返回非空表,取第一行,实际上也只有一行
string Area = dt.Rows[0].ItemArray[0].ToString();
return Area;
}
private string Getbirthday(string brinumber)//获取生日
{
string brithday="";
string year =brinumber.Substring(0, 4);
string month= brinumber.Substring(4, 2);
string day = brinumber.Substring(6, 2);
brithday = year + "年—" + month + "月—" + day + "日";
return brithday;
}