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
}