文本框验证
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
开发工具与关键技术:Visual Studio 2015
作者:朱海恩
撰写时间:2019年6月10日
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
文本框验证,就是给文本框一个查询事件,比如:输入手机号的文本框、输入身份证号的文本框等等,都要进行验证他们的准确性的,因为手机号和身份证号都是有一定的写法的。如果想要通过文本框验证他们的准确性,那么就要先了解他们是由什么组合在一起,这样才可以判断输入的是否正确。验证身份证号和手机号都可以使用正则表达式来判断输入的是否准确性。接下来说说手机号的结构吧!
国内手机号码的规则:前3位为网络识别号;第4-7位为地区编码;第8-11位为用户号码。
现有手机号段:
移动:134 135 136 137 138 139 147 148 150 151 152 157 158 159 172 178 182 183 184 187 188 198
联通:130 131 132 145 146 155 156 166 171 175 176 185 186
电信:133 149 153 173 174 177 180 181 189 199
虚拟运营商:170
整理后:130~139 14[5-9] 15[012356789] 166 17[0-8] 18[0-9] 19[8-9]
手机号码的正则表达式为:^(13[09]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\d{8}$
验证手机号准确性步骤:
- 获取控件(文本框)输入值
- 判断手机号的长度是否等于11位数
- 使用正则表达式判断是否匹配,如果不匹配,提示框提示并且清空文本框输入值
代码如下图所示:
身份证号的结构解析:
- 前六位数是地址码:表示编码对象常住户口所在县(市、旗、区)的行政区划代码
- 第七位至十四位是出生日期码:表示编码对象出生的年、月、日,年、月、日代码之间不用分隔符。
- 第十五位至十七位是顺序码:表示在同一地址码所标识的区域范围内,对同年、同月、同日出生的人编定的顺序号,顺序码的奇数分配给男性,偶数分配给女性。
- 第十八位数是校验码:1 0 X 9 8 7 6 5 4 3 2
所以就可以大致写一个函数来校验是否正确了。
验证身份证号的步骤:
- 获取控件(文本框)输入值
string strIdCard = txt_idCar.Text.Trim();
- 判断身份证号的长度是否等于18位数,如果等于18位数,那么再使用正则表达式来判断身份证的准确性
//闰年出生日期的合法性正则表达式 || 平年出生日期的合法性正则表达式
if (!Regex.IsMatch(strIdCard, @"(^[1-9][0-9]{5}(19|20)[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]$)") || !Regex.IsMatch(strIdCard, @"(^[1-9][0-9]{5}(19|20)[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]$)"))
{
MessageBox.Show("身份证不合法!");
txt_idCar.Text = "";
}
- 切割字符串并绑定到相应的文本框
string keys = strIdCard;
//性别
int Sex = int.Parse(keys.Substring(16, 1));
//取余
if (Sex % 2 == 0)
{
cbo_gender.SelectedValue = 77;//77跟下拉框ID值对应
}
else
{
cbo_gender.SelectedValue = 76;//76跟下拉框ID值对应
}
//年
string birth_year = keys.Substring(6, 4);
//月
string birth_mounth = keys.Substring(10, 2);
//日
string birth_day = keys.Substring(12, 2);
//绑定出生日期
dtp_Birthday.Text = birth_ year + "年" + birth_ mounth + "月" + birth_ day + "日";
//获取今年年份
string stringNow = DateTime.Now.Year.ToString();
//把今年转化成数字
decimal decimalNow = Convert.ToDecimal(stringNow);
//获取(截取身份证)出生年份
decimal decbirth_year = Convert.ToDecimal(birth_ year);
//获取虚岁
decimal decimalAge = Convert.ToDecimal(decimalNow - decbirth_year) + 1;
//绑定年龄
txt_Age.Text = decimalAge.ToString().Trim();
- 输完前六位数后进行一个判断,判断长度是否等于6,如果等于就获取身份证地址
string strAddress = CheckIDCardGetDiQu.LoadAddress(txt_idCar.Text.ToString());
输入前六位数回填地址的效果图如图所示: