public class CheckForm
{
#region 判断身份证是否合法
#region 规则
/*
一、18位的身份证号码
如:130429####%%%%0078
1、1~6位为地区代码,其中1、2位数为各省级政府的代码,3、4位数为地、市级政府的代码,5、6位数为县、区级政府代码。如13(河北省)04(邯郸市)29(永年县)
2、7~14位为出生年月日
3、15~17位为顺序号,是县、区级政府所辖派出所的分配码,每个派出所分配码为10个连续号码,例如“000-009”或“060-069”,其中单数为男性分配码,双数为女性分配码,如遇同年同月同日有两人以上时顺延第二、第三、第四、第五个分配码。如:007的就是个男生 而且和他同年月日生的男生至少有两个 他们的后四位是001* 和 003*
4、18位为效验位(识别码),通过复杂公式算出,普遍采用计算机自动生成。是前面17位的一种检验代码,如果你改变了前面某个数字而后面的效验代码不响应改变就会被计算软件判断为非法身份正号码。X也是效验代码的一中
二、15位的身份证号码
1、1~6位为地区代码
2、7~8位为出生年份(2位),9~10位为出生月份,11~12位为出生日期
3、第13~15位为顺序号,并能够判断性别,奇数为男,偶数为女。
各省市地区国家代码前两位代码是:
北京11 吉林22 福建35 广东44 云南53 天津12 黑龙江23 江西36 广西45 西藏54 河北13 上海31 山东37 海南46 陕西61 山西14 江苏32 河南41 重庆50
甘肃62 内蒙古15 浙江33 湖北42 四川51 青海63 辽宁21 安徽34 湖南43 贵州52 宁夏64 新疆65 台湾71 香港81 澳门82 国外91
18位身份证标准在国家质量技术监督局于1999年7月1日实施的GB11643-1999《公民身份号码》中做了明确规定。
GB11643-1999《公民身份号码》为GB11643-1989《社会保障号码》的修订版,其中指出将原标准名称“社会保障号码”更名为“公民身份号码”,另外GB11643-1999《公民身份号码》从实施之日起代替GB11643-1989。
公民身份号码是特征组合码,由十七位数字本体码和一位校验码组成。排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位校验码。其含义如下:
1. 地址码:表示编码对象常住户口所在县(市、旗、区)的行政区划代码,按GB/T2260的规定执行。
2. 出生日期码:表示编码对象出生的年、月、日,按GB/T7408的规定执行,年、月、日分别用4位、2位、2位数字表示,之间不用分隔符。
3. 顺序码:表示在同一地址码所标识的区域范围内,对同年、同月、同日出生的人编定的顺序号,顺序码的奇数分配给男性,偶数分配给女性。
校验的计算方式:
1. 对前17位数字本体码加权求和
公式为:S = Sum(Ai * Wi), i = 0, ... , 16
其中Ai表示第i位置上的身份证号码数字值,Wi表示第i位置上的加权因子,其各位对应的值依次为:
7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2
2. 以11对计算结果取模
Y = mod(S, 11)
3. 根据模的值得到对应的校验码对应关系为:
Y值: 0 1 2 3 4 5 6 7 8 9 10
校验码: 1 0 X 9 8 7 6 5 4 3 2
*/
#endregion
/// <summary>
/// 判断15位身份证是否合法
/// </summary>
/// <param name="IDCard">身份证号码</param>
/// <returns>bool</returns>
public static bool CheckIDCard15(string IDCard)
{
long n = 0;
if (long.TryParse(IDCard, out n) == false || n < Math.Pow(10, 14))
{
return false;//数字验证
}
string address = "11x22x35x44x53x12x23x36x45x54x13x31x37x46x61x14x32x41x50x62x15x33x42x51x63x21x34x43x52x64x65x71x81x82x91";
if (address.IndexOf(IDCard.Remove(2)) == -1)
{
return false;//省份验证
}
string birth = IDCard.Substring(6, 6).Insert(4, "-").Insert(2, "-");
DateTime time = new DateTime();
if (DateTime.TryParse(birth, out time) == false)
{
return false;//生日验证
}
return true;//符合15位身份证标准
}
/// <summary>
/// 判断18位身份证是否合法
/// </summary>
/// <param name="IDCard">IDCard</param>
/// <returns></returns>
public static bool CheckIDCard18(string IDCard)
{
long n = 0;
if (long.TryParse(IDCard.Remove(17), out n) == false || n < Math.Pow(10, 16) || long.TryParse(IDCard.Replace('x', '0').Replace('X', '0'), out n) == false)
{
return false;//数字验证
}
string address = "11x22x35x44x53x12x23x36x45x54x13x31x37x46x61x14x32x41x50x62x15x33x42x51x63x21x34x43x52x64x65x71x81x82x91";
if (address.IndexOf(IDCard.Remove(2)) == -1)
{
return false;//省份验证
}
string birth = IDCard.Substring(6, 8).Insert(6, "-").Insert(4, "-");
DateTime time = new DateTime();
if (DateTime.TryParse(birth, out time) == false)
{
return false;//生日验证
}
string[] arrVarifyCode = ("1,0,x,9,8,7,6,5,4,3,2").Split(',');
string[] Wi = ("7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2").Split(',');
char[] Ai = IDCard.Remove(17).ToCharArray();
int sum = 0;
for (int i = 0; i < 17; i++)
{
sum += int.Parse(Wi[i]) * int.Parse(Ai[i].ToString());
}
int y = -1;
Math.DivRem(sum, 11, out y);
if (arrVarifyCode[y] != IDCard.Substring(17, 1).ToLower())
{
return false;//校验码验证
}
return true;//符合GB11643-1999标准
}
public static bool CheckIDCard(string IDCard)
{
if (IDCard.Trim().Length==15) //大陆15位身份证号码验证
{
#region
long n = 0;
if (long.TryParse(IDCard, out n) == false || n < Math.Pow(10, 14))
{
return false;//数字验证
}
string address = "11x22x35x44x53x12x23x36x45x54x13x31x37x46x61x14x32x41x50x62x15x33x42x51x63x21x34x43x52x64x65x71x81x82x91";
if (address.IndexOf(IDCard.Remove(2)) == -1)
{
return false;//省份验证
}
string birth = IDCard.Substring(6, 6).Insert(4, "-").Insert(2, "-");
DateTime time = new DateTime();
if (DateTime.TryParse(birth, out time) == false)
{
return false;//生日验证
}
return true;//符合15位身份证标准
#endregion
}
else if (IDCard.Trim().Length == 18) //大陆18位身份证号码验证
{
#region
long n = 0;
if (long.TryParse(IDCard.Remove(17), out n) == false || n < Math.Pow(10, 16) || long.TryParse(IDCard.Replace('x', '0').Replace('X', '0'), out n) == false)
{
return false;//数字验证
}
string address = "11x22x35x44x53x12x23x36x45x54x13x31x37x46x61x14x32x41x50x62x15x33x42x51x63x21x34x43x52x64x65x71x81x82x91";
if (address.IndexOf(IDCard.Remove(2)) == -1)
{
return false;//省份验证
}
string birth = IDCard.Substring(6, 8).Insert(6, "-").Insert(4, "-");
DateTime time = new DateTime();
if (DateTime.TryParse(birth, out time) == false)
{
return false;//生日验证
}
string[] arrVarifyCode = ("1,0,x,9,8,7,6,5,4,3,2").Split(',');
string[] Wi = ("7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2").Split(',');
char[] Ai = IDCard.Remove(17).ToCharArray();
int sum = 0;
for (int i = 0; i < 17; i++)
{
sum += int.Parse(Wi[i]) * int.Parse(Ai[i].ToString());
}
int y = -1;
Math.DivRem(sum, 11, out y);
if (arrVarifyCode[y] != IDCard.Substring(17, 1).ToLower())
{
return false;//校验码验证
}
return true;//符合GB11643-1999标准
#endregion
}
else if (System.Text.RegularExpressions.Regex.IsMatch(IDCard, @"^[a-zA-Z][0-9]{9}$"))//台湾
{
return true;
}
else if (System.Text.RegularExpressions.Regex.IsMatch(IDCard, @"^[A-Z]{1,2}[0-9]{5,6}\(?[0-9A]\)?$"))//香港
{
return true;
}
else if (System.Text.RegularExpressions.Regex.IsMatch(IDCard, @"^[1|5|7][0-9]{6}[0−9Aa]$"))//澳门
{
return true;
}
else
{
return false;
}
}
#endregion
#region 验证网址
/// <summary>
/// 验证网址
/// </summary>
/// <param name="_strUrl"></param>
/// <returns></returns>
public static bool ValidateUrl(string _strUrl)
{
string patten = @"^http(s)?://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?$"; //正则表达式 网址格式:http://www.jirol.com
Regex r = new Regex(patten); //声明一个Regex对象
Match m = r.Match(_strUrl); //使用Match方法进行匹配
if (m.Success) //匹配成功
{
return true;
}
else
{
return false;
}
}
#endregion
#region 验证电话号码
/// <summary>
/// 验证电话号码
/// </summary>
/// <param name="str">验证电话号码</param>
/// <returns>bool</returns>
public static bool checkTel(string Tel)
{
string patten = @"(\d{3}-)?\d{8}|(\d{4}-)(\d{7})$";//"XXX-XXXXXXX"、"XXXX-XXXXXXXX"、"XXX-XXXXXXX"、"XXX-XXXXXXXX"、"XXXXXXX"和"XXXXXXXX"。
Regex r = new Regex(patten);
Match m = r.Match(Tel);
if (m.Success)
{
return true;
}
else
{
return false;
}
}
#endregion
#region 验证手机
/// <summary>
/// 验证手机 13***或14*****或15*****或16*****或17*****或18*****或19*****
/// </summary>
/// <param name="str"> 验证手机</param>
/// <returns>bool</returns>
public static bool checkMobile(string Phone)
{
return System.Text.RegularExpressions.Regex.IsMatch(Phone, @"^[1]+[3-9]+\d{9}$");//13***或14*****或15*****或16*****或17*****或18*****或19*****
}
#endregion
#region 验证Email
/// <summary>
/// 验证Email
/// </summary>
/// <param name="Email"></param>
/// <returns></returns>
public static bool checkEmail(string Email)
{
return Regex.IsMatch(Email, @"^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$");
}
#endregion
#region 中国邮编
/// <summary>
/// 中国邮编
/// </summary>
/// <param name="post"></param>
/// <returns></returns>
public static bool checkPost(string post)
{
return Regex.IsMatch(post, @"^\d{6}$");
}
#endregion
#region 是否为数字
/// <summary>
/// 是否为数字
/// </summary>
/// <param name="Number"></param>
/// <returns></returns>
public static bool checkNumber(string Number)
{
return System.Text.RegularExpressions.Regex.IsMatch(Number, @"^[0-9]*$");
}
#endregion
#region 密码验证
/// <summary>
/// 密码验证
/// </summary>
/// <param name="Pwd">密码明文字符串</param>
/// <param name="iType">
/// <para>iType=1 至少8-16个字符,至少1个大写字母,1个小写字母和1个数字,其他可以是任意字符</para>
/// <para>iType=2 至少8个字符,至少1个大写字母,1个小写字母和1个数字,不能包含特殊字符(非数字字母)</para>
/// <para>iType=3 至少8个字符,至少1个字母,1个数字和1个特殊字符</para>
/// <para>iType=4 至少8个字符,至少1个大写字母,1个小写字母和1个数字</para>
/// <para>iType=5 至少8个字符,至少1个大写字母,1个小写字母,1个数字和1个特殊字符:</para>
/// <para>iType=6 最少8个最多十个字符,至少1个大写字母,1个小写字母,1个数字和1个特殊字符</para>
/// </param>
/// <returns></returns>
public bool CheckPwd(string Pwd, int iType = 1)
{
string strReg = @"^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[^]{8,16}$";
switch (iType)
{
#region
case 1://至少8-16个字符,至少1个大写字母,1个小写字母和1个数字,其他可以是任意字符
default:
strReg = @"^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[^]{8,16}$";
break;
case 2://至少8个字符,至少1个大写字母,1个小写字母和1个数字,不能包含特殊字符(非数字字母)
strReg = @"^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d]{8,}$";
break;
case 3://至少8个字符,至少1个字母,1个数字和1个特殊字符
strReg = @"^(?=.*[A-Za-z])(?=.*\d)(?=.*[$@$!%*#?&])[A-Za-z\d$@$!%*#?&]{8,}$";
break;
case 4://至少8个字符,至少1个大写字母,1个小写字母和1个数字
strReg = @"^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z\d]{8,}$";
break;
case 5://至少8个字符,至少1个大写字母,1个小写字母,1个数字和1个特殊字符:
strReg = @"^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[$@$!%*?&])[A-Za-z\d$@$!%*?&]{8,}$";
break;
case 6://最少8个最多十个字符,至少1个大写字母,1个小写字母,1个数字和1个特殊字符
strReg = @"^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[$@$!%*?&])[A-Za-z\d$@$!%*?&]{8,10}$";
break;
#endregion
}
return System.Text.RegularExpressions.Regex.IsMatch(Pwd, strReg);
}
#endregion
/// <summary>
/// IP 地址
/// </summary>
/// <param name="IP"></param>
/// <returns></returns>
public bool IPCheck(string IP) { string num = "(25[0-5]|2[0-4]\\d|[0-1]\\d{2}|[1-9]?\\d)"; return Regex.IsMatch(IP, ("^" + num + "\\." + num + "\\." + num + "\\." + num + "$")); }
/// <summary>
/// 输入密码条件(字符与数据同时出现)
/// </summary>
/// <param name="str_password"></param>
/// <returns></returns>
public bool IsPassword(string str_password) { return System.Text.RegularExpressions.Regex.IsMatch(str_password, @"[A-Za-z]+[0-9]"); }
/// <summary>
/// 两位小数
/// </summary>
/// <param name="str_decimal"></param>
/// <returns></returns>
public bool IsDecimal(string str_decimal) { return System.Text.RegularExpressions.Regex.IsMatch(str_decimal, @"^[0-9]+(.[0-9]{2})?$"); }
/// <summary>
/// 一年的12个月
/// </summary>
/// <param name="str_Month"></param>
/// <returns></returns>
public bool IsMonth(string str_Month) { return System.Text.RegularExpressions.Regex.IsMatch(str_Month, @"^(0?[[1-9]|1[0-2])$"); }
/// <summary>
/// 一个月的31天
/// </summary>
/// <param name="str_day"></param>
/// <returns></returns>
public bool IsDay(string str_day) { return System.Text.RegularExpressions.Regex.IsMatch(str_day, @"^((0?[1-9])|((1|2)[0-9])|30|31)$"); }
/// <summary>
/// 非零的正整数
/// </summary>
/// <param name="str_intNumber"></param>
/// <returns></returns>
public bool IsIntNumber(string str_intNumber) { return System.Text.RegularExpressions.Regex.IsMatch(str_intNumber, @"^\+?[1-9][0-9]*$"); }
/// <summary>
/// 大写字母
/// </summary>
/// <param name="str_UpChar"></param>
/// <returns></returns>
public bool IsUpChar(string str_UpChar) { return System.Text.RegularExpressions.Regex.IsMatch(str_UpChar, @"^[A-Z]+$"); }
/// <summary>
/// 小写字母
/// </summary>
/// <param name="str_UpChar"></param>
/// <returns></returns>
public bool IsLowChar(string str_UpChar) { return System.Text.RegularExpressions.Regex.IsMatch(str_UpChar, @"^[a-z]+$"); }
/// <summary>
/// 检查字符串重复出现的词
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
// private void btnWord_Click(object sender, EventArgs e) { System.Text.RegularExpressions.MatchCollection matches = System.Text.RegularExpressions.Regex.Matches(label1.Text, @"\b(?<word>\w+)\s+(\k<word>)\b", System.Text.RegularExpressions.RegexOptions.Compiled | System.Text.RegularExpressions.RegexOptions.IgnoreCase); if (matches.Count != 0) { foreach (System.Text.RegularExpressions.Match match in matches) { string word = match.Groups["word"].Value; MessageBox.Show(word.ToString(), "英文单词"); } } else { MessageBox.Show("没有重复的单词"); } }
/// <summary>
/// 替换字符串
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
// private void button1_Click(object sender, EventArgs e) { string strResult = System.Text.RegularExpressions.Regex.Replace(textBox1.Text, @"[A-Za-z]\*?", textBox2.Text); MessageBox.Show("替换前字符:" + "\n" + textBox1.Text + "\n" + "替换的字符:" + "\n" + textBox2.Text + "\n" + "替换后的字符:" + "\n" + strResult, "替换"); }
/// <summary>
/// 拆分字符串
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
// private void button1_Click(object sender, EventArgs e) { //实例: 甲025-8343243乙0755-2228382丙029-32983298389289328932893289丁 foreach (string s in System.Text.RegularExpressions.Regex.Split(textBox1.Text,@"\d{3,4}-\d*")) { textBox2.Text+=s; //依次输出 "甲乙丙丁" } }
/// <summary>
/// 验证输入字母
/// </summary>
/// <param name="str_Letter"></param>
/// <returns></returns>
public bool IsLetter(string str_Letter) { return System.Text.RegularExpressions.Regex.IsMatch(str_Letter, @"^[A-Za-z]+$"); }
/// <summary>
/// 验证输入汉字
/// </summary>
/// <param name="str_chinese"></param>
/// <returns></returns>
public bool IsChinese(string str_chinese) { return System.Text.RegularExpressions.Regex.IsMatch(str_chinese, @"^[\u4e00-\u9fa5],{0,}$"); }
/// <summary>
/// 验证输入字符串 (至少8个字符)
/// </summary>
/// <param name="str_Length"></param>
/// <returns></returns>
public bool IsLength(string str_Length) { return System.Text.RegularExpressions.Regex.IsMatch(str_Length, @"^.{8,}$"); }
}