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

C# 利用正则表达式验证身份证号

2009-06-05 19:17 316 查看
#region 身份证格式验证,以及15.18位互转方法

    ///
<summary>

    ///
验证18位身份证格式

    ///
</summary>

    ///
<param
name="cid"></param>

    ///
<returns>返回字符串,出错信息</returns>

    public
string CheckCidInfo18(string cid)

    {

       
string[] aCity = new string[] { null, null, null, null, null, null,
null, null, null, null, null, "北京", "天津", "河北", "山西", "内蒙古", null,
null, null, null, null, "辽宁", "吉林", "黑龙江", null, null, null, null,
null, null, null, "上海", "江苏", "浙江", "安微", "福建", "江西", "山东", null,
null, null, "河南", "湖北", "湖南", "广东", "广西", "海南", null, null, null,
"重庆", "四川", "贵州", "云南", "西藏", null, null, null, null, null, null,
"陕西", "甘肃", "青海", "宁夏", "新疆", null, null, null, null, null, "台湾",
null, null, null, null, null, null, null, null, null, "香港", "澳门",
null, null, null, null, null, null, null, null, "国外" };

       
double iSum = 0;

       
System.Text.RegularExpressions.Regex rg = new
System.Text.RegularExpressions.Regex(@"^\d{17}(\d|X|x)$");

       
System.Text.RegularExpressions.Match mc = rg.Match(cid);

       
if (!mc.Success)

       
{

           
return "- 您的身份证号码格式有误!";

       
}

       
cid = cid.ToLower();

       
cid = cid.Replace("x", "a");

       
if (aCity[int.Parse(cid.Substring(0, 2))] == null)

       
{

           
return "- 您的身份证号码格式有误!";//非法地区

       
}

       
try

       
{

           
DateTime.Parse(cid.Substring(6, 4) + "-" + cid.Substring(10, 2) +
"-" + cid.Substring(12, 2));

       
}

       
catch

       
{

           
return "- 您的身份证号码格式有误!";//非法生日

       
}

       
for (int i = 17; i >= 0; i--)

       
{

           
iSum += (System.Math.Pow(2, i) % 11) * int.Parse(cid[17 -
i].ToString(), System.Globalization.NumberStyles.HexNumber);

       
}

       
if (iSum % 11 != 1)

           
return ("- 您的身份证号码格式有误!");//非法证号

       
return "";

    }

    ///
<summary>

    ///
验证15位身份证格式

    ///
</summary>

    ///
<param
name="cid"></param>

    ///
<returns></returns>

    public
string CheckCidInfo15(string cid)

    {

       
string[] aCity = new string[] { null, null, null, null, null, null,
null, null, null, null, null, "北京", "天津", "河北", "山西", "内蒙古", null,
null, null, null, null, "辽宁", "吉林", "黑龙江", null, null, null, null,
null, null, null, "上海", "江苏", "浙江", "安微", "福建", "江西", "山东", null,
null, null, "河南", "湖北", "湖南", "广东", "广西", "海南", null, null, null,
"重庆", "四川", "贵州", "云南", "西藏", null, null, null, null, null, null,
"陕西", "甘肃", "青海", "宁夏", "新疆", null, null, null, null, null, "台湾",
null, null, null, null, null, null, null, null, null, "香港", "澳门",
null, null, null, null, null, null, null, null, "国外" };

       
System.Text.RegularExpressions.Regex rg = new
System.Text.RegularExpressions.Regex(@"^\d{15}$");

       
System.Text.RegularExpressions.Match mc = rg.Match(cid);

       
if (!mc.Success)

       
{

           
return "- 您的身份证号码格式有误!";

       
}

       
cid = cid.ToLower();

       
cid = cid.Replace("x", "a");

       
if (int.Parse(cid.Substring(0, 2)) >
aCity.Length)

       
{

           
return "- 您的身份证号码格式有误!";//非法地区

       
}

       
if (aCity[int.Parse(cid.Substring(0, 2))] == null)

       
{

           
return "- 您的身份证号码格式有误!";//非法地区

       
}

       
try

       
{

           
DateTime.Parse(cid.Substring(6, 2) + "-" + cid.Substring(8, 2) +
"-" + cid.Substring(10, 2));

       
}

       
catch

       
{

           
return "- 您的身份证号码格式有误!";//非法生日

       
}

       
return "";

    }

    ///
<summary>

    ///
15位转18位身份证号

    ///
</summary>

    ///
<param
name="perIDSrc"></param>

    ///
<returns></returns>

    public
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位上填上‘1’,‘9’两个数字

       
perIDNew += "19";

       
perIDNew += perIDSrc.Substring(6, 9);

       
//进行加权求和

       
for (int i = 0; i < 17; i++)

       
{

           
iS += int.Parse(perIDNew.Substring(i, 1)) * iW[i];

       
}

       
//取模运算,得到模值

       
int iY = iS % 11;

       
//从LastCode中取得以模为索引号的值,加到身份证的最后一位,即为新身份证号。

       
perIDNew += LastCode.Substring(iY, 1);

       
return perIDNew;

    }

    ///
<summary>

    ///
18位转15位身份证号

    ///
</summary>

    ///
<param
name="perIDSrc"></param>

    ///
<returns></returns>

    public
string per18To15(string perIDSrc)

    {

       
//前6位

       
string str1 = perIDSrc.Substring(0, 6);

       
//后9位

       
string str2 = perIDSrc.Substring(8, 9);

       
//新字符串

       
string perIDNew = str1 + str2;

       
return perIDNew;

    }

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