要验证他只能有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;
} }
我这里有一段代码 但是 有点问题 求解决
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;
} }
'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
/// <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
RegularExpressionValidator 控件
属性里的ValidationExpression 里找对应的正则表达式