public static string Per15To18(string perIDSrc)
{
int iS=0;
//加权因子常数
int[] iW=new int[]{7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};
//校验码常数
string LastCode="10X98765432";
//新身份证号
string perIDNew;
perIDNew=perIDSrc.Substring(0,6);
//在第6位及第7位上填上'18'或'19'两个数字
int[] hundred=new int[]{996,997,998,999};
for (int i=0;i<hundred.Length;i++)
{
if (hundred==Convert.ToInt32(perIDSrc.Substring(12,3)))
{
perIDNew+="18";
break;
}
else if(i==hundred.Length-1)
{
perIDNew+="19";
break;
}
}
perIDNew+=perIDSrc.Substring(6,9);
//进行加权求和
for (int i=0;i<17;i++)
{
iS+=int.Parse(perIDNew.Substring(i,1))*iW;
}
//取模运算,得到模值
int iY=iS%11;
perIDNew+=LastCode.Substring(iY,1);
return perIDNew;
}
/// <summary>
/// 身份证18位转15位
/// </summary>
/// <param name="perIDSrc">身份证号</param>
/// <returns></returns>
public static string Per18To15(string perIDSrc)
{
string perIDOld=perIDSrc.Substring(0,6);
perIDOld+=perIDSrc.Substring(8,9);
return perIDOld;
}
/// <summary>
/// 身份证有效性验证
/// </summary>
/// <param name="perIDSrc">身份证号</param>
/// <returns></returns>
public static bool Validper(string perIDSrc)
{
try
{
if (perIDSrc.Trim().Length == 15)
{
string tmp=Per15To18(perIDSrc);
return Validper(tmp);
}
else if (perIDSrc.Trim().Length == 18)
{
if (Per15To18(Per18To15(perIDSrc)) == perIDSrc.Trim())
return true;
else
return false;
}
else
{
return false;
}
}
catch
{
return false;
}
}
注:只需调用Validper()方法
另注:被同事找到一个BUG,不能验证老外的身份证........
身份证有效性验证
最新推荐文章于 2023-03-21 13:46:58 发布