您的位置:首页 > 编程语言 > ASP

asp.net身份证号码校验方法

2014-06-19 13:19 330 查看
#region 身份证校验
/// <summary>
/// 身份证校验
/// </summary>
/// <param name="Code">身份证号码</param>
/// <returns></returns>
[WebMethod]

public string CheckCode(string Code)
{
try
{
Code = Code.Trim();//去除首尾空格
if (Code.Length == 18)
{
string AreaCode = Code.Substring(0, 6);//获取地区码(前6位是地区码)
string BirthDate = Code.Substring(6, 8);//获取出生日期(中间8位是出生年月日)
//string IdCode = Code.Substring(0,17);
SqlHerper sh = new SqlHerper();
string CheckArea = sh.ExeScalar(string.Format("select count(*) from Area where ID='{0}'",AreaCode)); //需要查询地区代码库,可从国家统计局获取到全国地区代码
if (CheckArea == "" || Convert.ToInt32(CheckArea) <= 0) //验证地区码
{
return JsonConvert.SerializeObject("-1"); //地区码不正确
}

else
{
BirthDate = BirthDate.Insert(4, "-").Insert(7, "-");
DateTime time=new DateTime();
if (!DateTime.TryParse(BirthDate, out time)) //校验生日是否正确
{
return JsonConvert.SerializeObject("-2"); //生日格式不正确
}

else
{
if (getValidateCode(Code.Substring(0, 17)).ToLower() != Code.Substring(17, 1).ToLower()) //检验最后一位校验码是否正确
{
return JsonConvert.SerializeObject("-3"); //校验码不正确
}

else
{
return JsonConvert.SerializeObject("1");
}
}
}
}

else
{
return JsonConvert.SerializeObject("-4"); //身份证号码长度不为18位
}
}

catch
{
return JsonConvert.SerializeObject("-5"); //未知异常
}
}

#endregion

#region 根据身份证前17数获取身份证最后一位校验码
/// <summary>
/// 根据身份证前17数获取身份证最后一位校验码
/// </summary>
/// <param name="id17">前17位数</param>
/// <returns>返回最后一位校验码</returns>
public string getValidateCode(String id17)
{
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 = id17.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);
string a = arrVarifyCode[y];
return arrVarifyCode[y];
}

#endregion

public class SqlHerper
{
private static string connStr = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\rudy_lai\Desktop\新建文件夹\WcfService1\WcfService1\DB\Area.accdb";
//private static string connStr = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=DB\Area.accdb";
OleDbConnection conn = null;

/// <summary>
/// 返回查询首行首列
/// </summary>
/// <param name="SqlStr">查询语句</param>
/// <returns></returns>
public string ExeScalar(string SqlStr)
{
using (conn = new OleDbConnection(connStr))
{
try
{
conn.Open();
OleDbCommand cmd = new OleDbCommand(SqlStr, conn);
return cmd.ExecuteScalar().ToString();
}

catch
{
return "";
}

finally
{
conn.Close();
conn.Dispose();
}
}
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: