【原创代码】身份证转换与数据类型判定类
近期做的项目,客户对身份证校验要求很高,所以连抄带写做了这个类,放在这里就当作代码库积累吧。包括一个有点意思的数据类型判定类,实现string2Numeric和string2Date的无异常转换。
/// <summary>
/// 检查身份证号码序列是否合法
/// </summary>
/// <param name="cardId">身份证号码</param>
/// <returns>正确:返回空值,否则返回错误原因</returns>
public static string Check(string cardId)
{
if (TypeHelper.IsNull(cardId)) return "身份证:无效空对象";
int len = cardId.Length;
if (len != 15 && len != 18)
{
return "身份证:长度不正确";
}
if (!CheckAddress(cardId))
{
return "身份证:籍贯信息错误";
}
if (!CheckBirthday(cardId))
{
return "身份证:无效的出生日期,必须在“1950年1月1日”到“2010年12月31日”之间";
}
if (len >= 17)
{
int t;
if (TypeHelper.TryIntParse(cardId.Substring(14, 3), out t))
{
if (t == -1)
{
return "身份证:无效号码,前17位号码必须为数字";
}
}
else
{
return "身份证:无效号码,前17位号码必须为数字";
}
}
if (len == 18 && !CheckSumCode(cardId))
{
return "身份证:最后一位校验码无效";
}
return string.Empty;
}
/// <summary>
/// 15位与18位身份证互换
/// </summary>
/// <param name="cardId">要转换的身份证号码</param>
/// <param name="from">原始位数</param>
/// <param name="to">目标位数</param>
public static string TryConvert(string cardId, int from, int to)
{
if (TypeHelper.IsNull(cardId)) return string.Empty;
int len = cardId.Length;
StringBuilder sb = new StringBuilder(cardId);
//如果是15位号码
if (len == 15 && from == 15 && to == 18)
{
sb.Insert(6,"19");
sb.Append(ParseSumCode(sb.ToString()));
}
if (len == 18 && from == 18 && to == 15)
{
sb.Remove(6,2);
sb.Remove(15, 1);
}
return sb.ToString();
}
/// <summary>
/// 检验身份证号码信息是否正确
/// </summary>
/// <param name="cardId">身份证号码:15位或18位</param>
/// <param name="address">籍贯</param>
/// <param name="birthday">出生日期</param>
/// <param name="sex">性别</param>
/// <returns>正确:返回空,否则返回错误信息</returns>
public static string Validate(string cardId, string address, string birthday, string sex)
{
//先检查身份证号码序列是否正确
string v = Check(cardId);
if (v.Length != 0)
{
return v;
}
if (!TypeHelper.IsEmptyString(address))
{
v = ParseAddress(cardId);
if(v == null || v.CompareTo(address) != 0)
{
return "籍贯信息与身份证不符,籍贯应为:" + v;
}
}
if(!TypeHelper.IsEmptyString(birthday))
{
v = ParseBirthday(cardId);
DateTime t1 = Convert.ToDateTime(v);
DateTime t2 = Convert.ToDateTime(birthday);
if (t1 != t2)
{
return "出生日期信息与身份证不符,出生日期应为:" + v;
}
}
if(!TypeHelper.IsEmptyString(sex))
{
v = ParseSex(cardId);
if ( v.CompareTo(sex) != 0)
{
return "性别信息与身份证不符,性别应为:" + v;
}
}
return string.Empty;
} 点击此处下载


浙公网安备 33010602011771号