要验证他只能有18和15位 ,如果是18位 就前17位要是数字 而且里面的日期格式要是正确的 ,还有比如今年是2008年你输入2009年就不正确了 ,还有最后一位的问题,地区的问题,所有方面都要考虑 ,写一个方法。
我这里有一段代码 但是 有点问题 求解决
        public string[] PROVINCE_CODE = {
                    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,
                    "国外"};
        public void CheckCidInfo(string ACidCode)
        {            try
            {
                if (ACidCode.Length != 15 && ACidCode.Length != 18)
                {
                    MessageBox.Show("身份证输入错误");
                    return;
                }
                for (int i = 0; i < 17; i++)
                {
                    if ("0123456789".IndexOf(ACidCode[i]) < 0)
                    {
                        MessageBox.Show("身份证输入错误");
                        return; // 前17位必须数字
                    }                }
                if ("0123456789Xx".IndexOf(ACidCode[17]) < 0)
                {
                    MessageBox.Show("身份证输入错误");
                    return; // 最后一位必须数字或X
                }
                int T = 0;
                for (int i = 0; i < 18; i++)
                {
                    int j = "xX".IndexOf(ACidCode[i]) < 0 ? ACidCode[i] - '0' : 10;
                    T += (int)Math.Pow(2, 17 - i) % 11 * j;
                }
                if (T % 11 != 1)
                {
                    MessageBox.Show("身份证输入错误");
                    return;
                }
                int vProvince = int.Parse(ACidCode.Substring(0, 2));
                if (vProvince > PROVINCE_CODE.Length ||
                string.IsNullOrEmpty(PROVINCE_CODE[vProvince]))
                {
                    MessageBox.Show("身份证输入错误");
                    return;
                }
                DateTime vBirthday;
                if (!DateTime.TryParseExact(ACidCode.Substring(6, 8), "yyyyMMdd", null,
                    System.Globalization.DateTimeStyles.None, out vBirthday))
                {                    MessageBox.Show("身份证日期格式错误");
                    return; // 日期格式错误
                }                if (vBirthday > DateTime.Now)
                {
                    MessageBox.Show("身份证输入错误");
                    return;
                }                if (vBirthday < new DateTime(1900, 10, 01))
                {
                    MessageBox.Show("身份证输入错误");
                    return;
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("身份证输入正确 ");
                return;
            }        }

解决方案 »

  1.   

    贴段VB代码
    '18位验证
        Public Function CheckID18(ByVal cid As String) As String
            Try
                If cid = "" Then Exit Function
                Dim aCity() As String = {"", "", "", "", "", "", "", "", "", "", _
                                    "", "北京", "天津", "河北", "山西", "内蒙古", "", _
                                    "", "", "", "", "辽宁", "吉林", "黑龙江", "", "", _
                                    "", "", "", "", "", "上海", "江苏", "浙江", "安微", _
                                    "福建", "江西", "山东", "", "", "", "河南", "湖北", _
                                    "湖南", "广东", "广西", "海南", "", "", "", "重庆", _
                                    "四川", "贵州", "云南", "西藏", "", "", "", "", "", _
                                    "", "陕西", "甘肃", "青海", "宁夏", "新疆", "", "", _
                                    "", "", "", "台湾", "", "", "", "", "", "", "", "", _
                                    "", "香港", "澳门", "", "", "", "", "", "", "", "", "国外"}
                Dim iSum As Double = 0
                Dim info As String = ""
                Dim rg As System.Text.RegularExpressions.Regex = New System.Text.RegularExpressions.Regex("^\d{17}(\d|x)$")
                Dim mc As System.Text.RegularExpressions.Match = rg.Match(cid)
                If mc.Success = False Then
                    Return ""
                End If
                cid = cid.ToLower
                cid = cid.Replace("x", "a")
                If aCity(Integer.Parse(cid.Substring(0, 2))) = "" Then
                    Return "身份证号码中地址部分不正确"
                End If
                Try
                    DateTime.Parse(cid.Substring(6, 4) & "-" & cid.Substring(10, 2) & "-" & cid.Substring(12, 2))
                Catch ex As Exception
                    Return "身份证号码中生日部分不正确"
                End Try
                Dim i As Integer
                For i = 17 To 0 Step -1
                    iSum = iSum + (System.Math.Pow(2, i) Mod 11) * Integer.Parse(cid.Substring(17 - i, 1), System.Globalization.NumberStyles.HexNumber)
                Next
                If iSum Mod 11 <> 1 Then
                    Return "无效身份证号码"
                End If
                Dim strSex As String
                If (Integer.Parse(cid.Substring(16, 1)) Mod 2) = 1 Then
                    strSex = "男"
                Else
                    strSex = "女"
                End If
                Return aCity(Integer.Parse(cid.Substring(0, 2))) & "," & cid.Substring(6, 4) & "-" & cid.Substring(10, 2) & "-" & cid.Substring(12, 2) & "," & strSex
            Catch ex As Exception
                Return ""
            End Try
        End Function    '15位验证
        Public Function CheckID15(ByVal SFZH As String) As String
            If SFZH = "" Then Exit Function
            Try
                Dim strJiaoYan() As Char = {"1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2"}
                Dim intQuan() As Integer = {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1}
                Dim strTemp As String
                Dim intTemp As String
                'Dim intTemp As Integer = 0
                Dim i As Integer            strTemp = SFZH.Substring(0, 6) & "19" & SFZH.Substring(6)
                For i = 0 To strTemp.Length - 1
                    intTemp = intTemp + Convert.ToInt32(strTemp.Substring(i, 1)) * intQuan(i)
                    'intTemp += Integer.Parse(strTemp.Substring(i, 1)) * intQuan(i)
                Next
                intTemp = intTemp Mod 11
                Return strTemp & strJiaoYan(intTemp)
            Catch ex As Exception
                Return ""
            End Try
        End Function
      

  2.   

    帖个,自己去试试看好使不好使#region 身份证合法性验证
            /// <summary>
            /// 身份证号码合法性验证
            /// </summary>
            /// <param name="cardnum">身份证号码字符串</param>
            /// <param name="verifyinfo">验证返回信息</param>
            /// <returns></returns>
            public bool VerifyCard(string cardnum, out string verifyinfo)
            {
                verifyinfo = string.Empty;
                if (cardnum.Length < 15)
                {
                    verifyinfo = "身份证号码长度不正确,请填写正确的身份证号码!";
                    return false;
                }
                List<string> list = new List<string>(new string[] { "11", "12", "13", "14", "15", "21", "22", "23", "31", "32", "33", "34", "35", "36", "37", "41", "42", "43", "44", "45", "46", "50", "51", "52", "53", "54", "61", "62", "63", "64", "65", "71", "81", "82", "91" });
                if (!list.Contains(cardnum.Substring(0, 2)))
                {
                    verifyinfo = "身份证号码地区不正确,请填写正确的身份证号码!";
                    return false;
                }
                string regstr = string.Empty;
                if (cardnum.Length.Equals(15))
                {
                    try
                    {
                        if ((int.Parse(cardnum.Substring(6, 2) + 1900)) % 4 == 0 || (int.Parse(cardnum.Substring(6, 2) + 1900)) % 100 == 0 && (int.Parse(cardnum.Substring(6, 2) + 1900)) % 4 == 0)
                        {
                            regstr = @"^[1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}$";
                        }
                        else
                        {
                            regstr = @"^[1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}$";
                        }
                    }
                    catch (FormatException ex)
                    {
                        verifyinfo = ex.Message;
                        return false;
                    }
                    if (Regex.IsMatch(cardnum, regstr))
                    {
                        verifyinfo = "身份证号码验证通过!";
                        return true;
                    }
                    else
                    {
                        verifyinfo = "身份证号码出生日期超出范围或含有非法字符!";
                        return false;
                    }
                }
                int sum;
                int y;
                string m = "F";
                string code = "10X98765432";
                if (cardnum.Length.Equals(18))
                {
                    try
                    {
                        if (int.Parse(cardnum.Substring(6, 4)) % 4 == 0 || int.Parse(cardnum.Substring(6, 4)) % 100 == 0 && int.Parse(cardnum.Substring(6, 4)) % 4 == 0)
                        {
                            regstr = @"^[1-9][0-9]{5}19[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}[0-9Xx]$";
                        }
                        else
                        {
                            regstr = @"^[1-9][0-9]{5}19[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}[0-9Xx]$";
                        }
                    }
                    catch(FormatException ex)
                    {
                        verifyinfo = ex.Message;
                        return false;
                    }
                    if (Regex.IsMatch(cardnum, regstr))
                    {
                        char[] chars = cardnum.ToCharArray();
                        sum = (int.Parse(chars[0].ToString())
                            + int.Parse(chars[10].ToString())) * 7
                            + (int.Parse(chars[1].ToString())
                            + int.Parse(chars[11].ToString())) * 9
                            + (int.Parse(chars[2].ToString())
                            + int.Parse(chars[12].ToString())) * 10
                            + (int.Parse(chars[3].ToString())
                            + int.Parse(chars[13].ToString())) * 5
                            + (int.Parse(chars[4].ToString())
                            + int.Parse(chars[14].ToString())) * 8
                            + (int.Parse(chars[5].ToString())
                            + int.Parse(chars[15].ToString())) * 4
                            + (int.Parse(chars[6].ToString())
                            + int.Parse(chars[16].ToString())) * 2
                            + int.Parse(chars[7].ToString()) * 1
                            + int.Parse(chars[8].ToString()) * 6
                            + int.Parse(chars[9].ToString()) * 3;
                        y = sum % 11;
                        m = code.Substring(y, 1);
                        if (m.Equals(chars[17].ToString().ToUpper()))
                        {
                            verifyinfo = "身份证号码验证通过!";
                            return true;
                        }
                        else
                        {
                            verifyinfo = "身份证号码校验错误,请填写正确的身份证号码!";
                            return false;
                        }
                    }
                    else
                    {
                        verifyinfo = "身份证号码出生日期超出范围或含有非法字符!";
                        return false;
                    }
                }
                verifyinfo = "身份证号码长度不正确,请填写正确的身份证号码!";
                return false;
            }
            #endregion
      

  3.   

    用验证控件!!
    RegularExpressionValidator  控件
    属性里的ValidationExpression 里找对应的正则表达式