.NET 验证工具类


using System;
using System.Text;
using System.Text.RegularExpressions;
using System.Web;

    public class VerificationHelper
    {
        /// 
        /// 检测用户名格式是否有效
        /// 
        /// 
        /// 
        public static bool IsValidUserName(string userName)
        {
            return Regex.IsMatch(userName, @"^[A-Za-z0-9]{4,16}$");
        }
        /// 
        /// 返回字符串真实长度, 1个汉字长度为2
        /// 
        /// 字符长度
        public static int GetStringLength(string stringValue)
        {
            return Encoding.Default.GetBytes(stringValue).Length;
        }
        #region 验证文本框输入为数字
        /// 
        /// 验证是不是数字(包含整数和小数)
        /// 
        /// 
        /// 
        public static bool GetNum(string str)
        {

            return Regex.IsMatch(str, @"^[-]?\d+[.]?\d*$");
        }
        #endregion

        #region 验证文本框输入为整数
        /// 
        /// 验证文本框输入为整数
        /// 
        /// 输入字符
        /// 返回一个bool类型的值
        public static bool ValidateNum(string strNum)
        {
            if (string.IsNullOrWhiteSpace(strNum)) return false;
            return Regex.IsMatch(strNum, "^[0-9]*$");
        }
        #endregion

        #region 验证文本框输入为日期
        /// 
        /// 判断日期
        /// 
        /// 
        /// 
        public static bool IsValidDate(string Date)
        {
            //验证YYYY-MM-DD格式,基本上把闰年和2月等的情况都考虑进去
            bool bValid = Regex.IsMatch(Date, @"^((((1[6-9]|[2-9]\d)\d{2})-(0?[13578]|1[02])-(0?[1-9]|[12]\d|3[01]))|(((1[6-9]|[2-9]\d)\d{2})-(0?[13456789]|1[012])-(0?[1-9]|[12]\d|30))|(((1[6-9]|[2-9]\d)\d{2})-0?2-(0?[1-9]|1\d|2[0-8]))|(((1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))-0?2-29-))$");
            return (bValid && Date.CompareTo("1753-01-01") >= 0);

            //将平年和闰年的日期验证表达式合并,我们得到最终的验证日期格式为YYYY-MM-DD的正则表达式为:

            //(([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|
            //[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})-(((0[13578]|1[02])-
            //(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)-(0[1-9]|[12][0-9]|30))|
            //(02-(0[1-9]|[1][0-9]|2[0-8]))))|((([0-9]{2})(0[48]|[2468][048]|
            //[13579][26])|((0[48]|[2468][048]|[3579][26])00))-02-29)
        }
        #endregion

        #region 验证文本框输入为电子邮件
        //验证电子邮件
        public static bool IsValidEmail(string strIn)
        {
            return Regex.IsMatch(strIn, @"^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$");
        }
        #endregion

        #region  验证文本框输入为电话号码
        /// 
        /// 验证文本框输入为电话号码
        /// 
        /// 输入字符串
        /// 返回一个bool类型的值
        public static bool IsPhone(string strPhone)
        {
            return Regex.IsMatch(strPhone, @"^[1]([3-9])[0-9]{9}$");
        }
        #endregion

        #region  验证文本框输入为传真号码
        /// 
        /// 验证文本框输入为传真号码
        /// 
        /// 输入字符串
        /// 返回一个bool类型的值
        public static bool validateFax(string strFax)
        {
            return Regex.IsMatch(strFax, @"86-\d{2,3}-\d{7,8}");
        }
        #endregion

        #region  验证是否为ip
        //获取IP的字符串 HttpContext.Current.Request.UserHostAddress

        /// 
        /// 是否为ip
        /// 
        /// 
        /// 
        public static bool IsIP(string ip)
        {
            return Regex.IsMatch(HttpContext.Current.Request.UserHostAddress, @"^((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)$");
        }
        public static bool IsIPSect(string ip)
        {
            return Regex.IsMatch(HttpContext.Current.Request.UserHostAddress, @"^((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){2}((2[0-4]\d|25[0-5]|[01]?\d\d?|\*)\.)(2[0-4]\d|25[0-5]|[01]?\d\d?|\*)$");

        }
        #endregion

        #region  验证字符串是否是yy-mm-dd字符串
        /// 
        /// 判断字符串是否是yy-mm-dd字符串
        /// 
        /// 
        /// 
        public static bool IsDateString(string str)
        {
            return Regex.IsMatch(str, @"(\d{4})-(\d{1,2})-(\d{1,2})");
        }
        #endregion

        #region 验证银行卡号是否符合规则
        /// 
        /// 验证银行卡号是否符合
        /// 
        public static bool Luhn(long n)
        {
            try
            {
                long nextdigit, sum = 0;
                bool alt = false;
                while (n != 0)
                {
                    nextdigit = n % 10;
                    if (alt)
                    {
                        nextdigit *= 2;
                        nextdigit -= (nextdigit > 9) ? 9 : 0;
                    }
                    sum += nextdigit;
                    alt = !alt;
                    n /= 10;
                }
                return (sum % 10 == 0);
            }
            catch (Exception)
            {
                return false;
            }
        }
        #endregion

        #region 验证是否是汉字
        /// 
        /// 验证是否是汉字
        /// 
        /// 
        /// 
        public static bool IsValidChinese(string str)
        {
            return Regex.IsMatch(str, @"^([\u4e00-\u9fa5]{1,20}|[a-zA-Z\.\s]{1,20})$");
        }
        #endregion

        #region 验证是否是非零的正整数
        /// 
        /// 验证是否是非零的正整数
        /// 
        /// 
        /// 
        public static bool IsValidInteger(string str)
        {
            return Regex.IsMatch(str, @"^\+?[1-9][0-9]*$");
        }
        #endregion

        #region 验证是否是整数或者是小数
        /// 
        /// 验证是否是整数或者是小数
        /// 
        /// 
        /// 
        public static bool IsValidIntegerorDecimal(string str)
        {
            return Regex.IsMatch(str, @"^[0 - 9] +\.{ 0,1}[0-9]{0,2}$");
        }
        #endregion

        #region 验证二代身份证号(18位数,GB11643-1999标准)  
        ///   
        /// 验证二代身份证号(18位数,GB11643-1999标准)  
        /// [长度为18位;前17位为数字,最后一位(校验码)可以为大小写x;匹配对应省份地址;生日能正确匹配;校验码能正确匹配]  
        ///   
        /// 待验证的字符串  
        /// 是否匹配  
        public static bool IsValidIDCard18(string input)
        {
            long l;
            //验证是否可以转换为正确的整数  
            if (!long.TryParse(input.Remove(17), out l) || l.ToString().Length != 17 || !long.TryParse(input.Replace('x', '0').Replace('X', '0'), out l))
                return false;
            //验证省份是否匹配  
            //1~6位为地区代码,其中1、2位数为各省级政府的代码,3、4位数为地、市级政府的代码,5、6位数为县、区级政府代码。  
            string address = "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 (!address.Contains(input.Remove(2) + ","))
                return false;
            //验证生日是否匹配  
            string birthdate = input.Substring(6, 8).Insert(6, "/").Insert(4, "/");
            DateTime dt;
            if (!DateTime.TryParse(birthdate, out dt))
                return false;
            //校验码验证  
            //校验码:  
            //(1)十七位数字本体码加权求和公式   
            //S = Sum(Ai * Wi), i = 0, ... , 16 ,先对前17位数字的权求和   
            //Ai:表示第i位置上的身份证号码数字值   
            //Wi:表示第i位置上的加权因子   
            //Wi: 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2   
            //(2)计算模   
            //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   
            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 = input.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] != input.Substring(17, 1).ToLower())
                return false;
            return true;
        }
        #endregion

        #region 验证身份证号(不区分一二代身份证号)
        ///   
        /// 验证身份证号(不区分一二代身份证号)  
        ///   
        /// 待验证的字符串  
        /// 是否匹配  
        public static bool IsValidIDCard(string input)
        {
            if (input.Length == 18)
                return IsValidIDCard18(input);
            else if (input.Length == 15)
                return IsValidIDCard15(input);
            else
                return false;
        }
        #endregion

        #region 验证一代身份证号(15位数)
        ///   
        /// 验证一代身份证号(15位数)  
        /// [长度为15位的数字;匹配对应省份地址;生日能正确匹配]  
        ///   
        /// 待验证的字符串  
        /// 是否匹配  
        public static bool IsValidIDCard15(string input)
        {
            //验证是否可以转换为15位整数  
            long l;
            if (!long.TryParse(input, out l) || l.ToString().Length != 15)
                return false;
            //验证省份是否匹配  
            //1~6位为地区代码,其中1、2位数为各省级政府的代码,3、4位数为地、市级政府的代码,5、6位数为县、区级政府代码。  
            string address = "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 (!address.Contains(input.Remove(2) + ","))
                return false;
            //验证生日是否匹配  
            string birthdate = input.Substring(6, 6).Insert(4, "/").Insert(2, "/");
            DateTime dt;
            if (!DateTime.TryParse(birthdate, out dt))
                return false;
            return true;
        }
        #endregion
    }

相关