您的位置:首页 > 其它

Winform 验证输入TextBox身份证号是否有效

2014-01-04 01:07 423 查看
private void btnView_Click(object sender, EventArgs e)
{
string id = txtID.Text.Trim();
int age = 0;
int year = 0;
if (id.Length == 15)
{
year = Convert.ToInt32(id.Substring(6, 2)) + 1900;      //截取字符串id第6位第7位

}
else if (id.Length == 18)
{
if(!this.CheckCardId(id))             //若CheckCardId返回值为false,提醒并return
{
MessageBox.Show("身份证号有误,请检查!");
return;
}
year = Convert.ToInt32(id.Substring(6, 4));        //截取字符串id第6位第7位

}
else
{
MessageBox.Show("你输入的身份证号长度有误!");
return;
}

age = DateTime.Now.Year - year;                 //计算用户的年龄

if (age >= 18)
{
picGirls.Visible = true;
}
else
{
MessageBox.Show("你太小了,图片不宜查看!");
}

}

/// <summary>
/// 校验身份证号,若正确则返回true,否则返回false
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
private bool CheckCardId(string id)
{
string number17 = id.Substring(0, 17);
string number18 = id.Substring(17);
int[] wQuan = { 7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};            //加权因子数组
string checkWei = "10X98765432";                              //校验码数组
int sum = 0;
for (int i = 0; i < 17; i++)
{
sum = sum + Convert.ToInt32(number17[i].ToString()) * wQuan[i];
}
int mod = sum % 11;                                     //除以11取模
string result = checkWei[mod].ToString();
if(number18.Equals(result,StringComparison.OrdinalIgnoreCase))    //字符串比较,忽略大小写
{
return true;
}
else
{
return false;
}
}

private void txtID_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar < '0' || e.KeyChar > '9')
{
e.Handled = true;
}
//如果身份证的第18位输入的是x或X,则不阻止
if ((txtID.SelectionStart == 17) && (e.KeyChar == 'x' || e.KeyChar == 'X'))
{
e.Handled = false;
}
//空格键不阻止
if (e.KeyChar == 8)
{
e.Handled = false;
}
}

private void txtID_TextChanged(object sender, EventArgs e)
{
picGirls.Visible = false;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息