ChengDa_English/SGGL/BLL/Common/IDCardValid.cs

152 lines
5.0 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web.UI.WebControls;
using Model;
namespace BLL
{
public static class IDCardValid
{
/// <summary>
/// 验证身份证号码
/// </summary>
/// <param name="Id">身份证号码</param>
/// <returns>验证成功为True否则为False</returns>
public static bool CheckIDCard(string Id)
{
if (string.IsNullOrEmpty(Id))
{
return false;
}
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
/// <summary>
/// 根据身份证号码获取生日
/// </summary>
/// <param name="IDCard"></param>
/// <returns></returns>
public static DateTime? getBirthByIDCard(string IDCard)
{
DateTime? birth = null;
if (!string.IsNullOrEmpty(IDCard))
{
string birthStr = string.Empty;
if (IDCard.Length == 18)
{
birthStr = IDCard.Substring(6, 8).Insert(6, "-").Insert(4, "-");
}
else if (IDCard.Length == 15)
{
birthStr = IDCard.Substring(6, 6).Insert(4, "-").Insert(2, "-");
}
DateTime time = new DateTime();
if (DateTime.TryParse(birthStr, out time))
{
birth = time;
}
}
return birth;
}
/// <summary>
/// 获取年龄
/// </summary>
/// <param name="birthDate"></param>
/// <param name="now"></param>
/// <returns></returns>
public static int CalculateAgeCorrect(DateTime birthDate)
{
DateTime now = DateTime.Now;
int age = now.Year - birthDate.Year;
if (now.Month < birthDate.Month || (now.Month == birthDate.Month && now.Day < birthDate.Day)) age--;
return age;
}
}
}