c#一些常用的方法集合

是从一个asp.net mvc的项目里看到的。挺实用的。


通过身份证号码获取出生日期和性别




通过身份证号码获取出生日期和性别

 #region 由身份证获得出生日期
    public static string CardBrith(string CardNo)
    {
        return CardNo.Substring(6, 4) + "-" + CardNo.Substring(10, 2) + "-" + CardNo.Substring(12, 2);
    }
    #endregion

    #region 由身份证获得性别
    public static string CardSex(string CardNo)
    {
        string sSex = "";
        int sex = Convert.ToInt16(CardNo.Substring(16, 1));
        if (sex % 2 == 0)//性别代码为偶数是女性奇数为男性
        {
            sSex = "女";
        }
        else
        {
            sSex = "男";
        }
        return sSex;
    }
    #endregion






验证身份证号码:

 #region 验证身份证号码
    /// <summary>
    /// 验证身份证号码,正确返回true
    /// </summary>
    /// <param name="Id"></param>
    /// <returns></returns>
    public static bool CardNO(string Id)
    {

        long n = 0;

        if (long.TryParse(Id.Remove(17), out n) == false || n < Math.Pow(10, 16) || long.TryParse(Id.Replace('x', '0').Replace('X', '0'), out n) == false)
        {

            return false;//数字验证

        }

        string address = "11x22x35x44x53x12x23x36x45x54x13x31x37x46x61x14x32x41x50x62x15x33x42x51x63x21x34x43x52x64x65x71x81x82x91";

        if (address.IndexOf(Id.Remove(2)) == -1)
        {

            return false;//省份验证

        }

        string birth = Id.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 = Id.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] != Id.Substring(17, 1).ToLower())
        {

            return false;//校验码验证

        }

        return true;//符合GB11643-1999标准

    }
    #endregion






字符串解码

 1 #region 字符串解码
 2     /// <summary>
 3     /// 字符串解码
 4     /// </summary>
 5     /// <param name="str">原字符</param>
 6     /// <returns>解码后的字符</returns>
 7     public static string StrDecode(string str)
 8     {
 9         if (string.IsNullOrEmpty(str)) { return str; }
10         return System.Web.HttpUtility.HtmlDecode(str); ;
11     }
12     #endregion







字符串编码

 1 #region 字符串编码
 2     /// <summary>
 3     /// 目前只做字符串编码
 4     /// </summary>
 5     /// <param name="str">原字符</param>
 6     /// <returns>编码后的字符</returns>
 7     public static string StrEncode(string str)
 8     {
 9         if (string.IsNullOrEmpty(str)) { return str; }
10         return System.Web.HttpUtility.HtmlEncode(str);
11     }
12     #endregion






获得分页记录

 1     #region 获得分页记录
 2     /// <summary>
 3     /// 获得分页记录,返回DataTable类型
 4     /// </summary>
 5     /// <param name="tblName">表名</param>
 6     /// <param name="strGetFields">需返回的字段</param>
 7     /// <param name="strWhere">条件</param>
 8     /// <param name="OrderType">排序字段</param>
 9     /// <param name="PageIndex">当前页面</param>
10     /// <param name="PageSize">页尺寸</param>
11     /// <returns>返回DataTable类型</returns>
12     public static DataTable GetPageData(string tblName, string strGetFields, string strWhere, string OrderType, int PageIndex, int PageSize)
13     {
14         SqlParameter[] para = {
15                     new SqlParameter("@Table", SqlDbType.VarChar, 1000){Value=tblName},//表名   
16                     new SqlParameter("@Fields", SqlDbType.VarChar, 5000){Value=strGetFields},//返回的列 
17                     new SqlParameter("@Where", SqlDbType.VarChar, 1000){Value=strWhere},//where条件  
18                     new SqlParameter("@OrderBy",SqlDbType.VarChar, 500){Value=OrderType},//排序 
19                     new SqlParameter("@CurrentPage",SqlDbType.Int,4){Value=PageIndex},//页码   
20                     new SqlParameter("@PageSize", SqlDbType.Int,4){Value=PageSize}//页尺寸
21                               };
22         DataTable dt = new DataTable();
23         XBSQL.RunProc("Pages", out dt, para);
24         return dt;
25     }
26     #endregion






获得符合条件指定列的和

 1     #region 获得符合条件指定列的和
 2     /// <summary>
 3     /// 返回符合条件指定列的和
 4     /// </summary>
 5     /// <param name="Field">列</param>
 6     /// <param name="TableName">表名</param>
 7     /// <param name="WhereSql">条件</param>
 8     /// <returns></returns>
 9     public static double RsSum(string Field, string TableName, string WhereSql)
10     {
11         string Num = XBSQL.EScalar("select sum(" + Field + ") from " + TableName + " where " + WhereSql + "").ToString();
12         Num = (string.IsNullOrEmpty(Num)) ? "0" : Num;
13         return Convert.ToDouble(Num);
14     }
15 
16     #endregion






获取记录总和

 1     #region 获得记录总数
 2     /// <summary>
 3     /// 获得满足条件的记录总数
 4     /// </summary>
 5     /// <param name="TableName">表名</param>
 6     /// <param name="WhereSql">条件</param>
 7     /// <returns></returns>
 8     public static int RsCount(string TableName, string WhereSql)
 9     {
10         int i = 0;
11         int.TryParse(XBSQL.EScalar("select Count(*) from " + TableName + " where " + WhereSql + "").ToString(), out i);
12         return i;
13         //return Convert.ToInt32(XBSQL.EScalar("select Count(*) from " + TableName + " where " + WhereSql + ""));
14     }
15     #endregion







根据参数读取数据库,获取多条记录单个字段
 1  #region 根据参数读取数据库,获取多条记录单个字段
 2     /// <summary>
 3     /// 获取多条记录单个字段
 4     /// </summary>
 5     /// <param name="field"></param>
 6     /// <param name="table"></param>
 7     /// <param name="where"></param>
 8     /// <returns></returns>
 9     public static string RDSQL(string field, string table, string where)
10     {
11         StringBuilder Str = new StringBuilder();
12         try
13         {
14             string sql = "select " + field + " from " + table + " where " + where + "";
15             SqlDataReader dr = XBSQL.EReader(sql);
16             while (dr.Read())
17             {
18                 Str.Append("," + dr[0].ToString().Trim());
19             }
20             dr.Close();
21             if (Str.Length > 0)
22             {
23                 Str.Remove(0, 1);
24                 return Str.ToString();
25             }
26             else
27             {
28                 return "";
29             }
30         }
31         catch (Exception Error)
32         {
33 
34         }
35         finally
36         {
37             Str.Length = 0;
38         }
39         return "";
40     }
41     #endregion








字符串截取

    #region 字符串截取
    /// <summary>
    /// str为要进行截取的字符串,start是第一个关键字(字符串),last是第二个关键字(字符串),n截取字符串方式   
    /// </summary>
    /// <param name="str"></param>
    /// <param name="start"></param>
    /// <param name="last"></param>
    /// <param name="n"></param>
    /// <returns></returns>
    public static string GetContent(string str, string start, string last, int n)
    {
        string ResStr = "";
        if (str.ToLower().IndexOf(start.ToLower()) >= 0)
        {
            if (str.ToLower().IndexOf(last.ToLower()) >= 0)
            {
                switch (n)
                {
                    //左右都截取(都取前面)(包含关键字)        
                    case 1: ResStr = str.Substring(str.ToLower().IndexOf(start.ToLower()), str.Length - str.ToLower().IndexOf(start.ToLower()));
                        ResStr = ResStr.Substring(0, ResStr.ToLower().IndexOf(last.ToLower()) + last.Length); break;
                    //左右都截取(都取前面)(去除关键字)                     
                    case 2: ResStr = str.Substring(str.ToLower().IndexOf(start.ToLower()) + start.Length, str.Length - str.ToLower().IndexOf(start.ToLower()) - start.Length);
                        ResStr = ResStr.Substring(0, ResStr.ToLower().IndexOf(last.ToLower())); break;
                    default: ResStr = ""; break;
                }
            }
        }
        return ResStr;
    }
    public static string GetContent(string str, string start, int n)
    {
        string ResStr = "";
        switch (n)
        {
            //只往左截取(取前面的)(包含关键字)            
            case 1: ResStr = str.Substring(0, str.ToLower().IndexOf(start.ToLower()) + start.Length); break;
            //只往左截取(取前面的)(去除关键字)                     
            case 2:
                int StrIndex = str.ToLower().IndexOf(start.ToLower());
                if (StrIndex > 0)
                {
                    ResStr = str.Substring(0, StrIndex);
                }
                break;
            //只往右截取(取前面的)(包含关键字)
            case 3: ResStr = str.Substring(str.ToLower().IndexOf(start.ToLower()), str.Length - str.ToLower().IndexOf(start.ToLower())); break;
            //只往右截取(取前面的)(去除关键字)
            case 4: ResStr = str.Substring(str.ToLower().IndexOf(start.ToLower()) + start.Length, str.Length - str.ToLower().IndexOf(start.ToLower()) - start.Length); break;
            default: ResStr = ""; break;
        }
        return ResStr;
    }
    #endregion






判断ip格式

 1  #region 判断是否是IP格式
 2     /// <summary>  
 3     /// 判断是否是IP地址格式 0.0.0.0  
 4     /// </summary>  
 5     /// <param name="str1">待判断的IP地址</param>  
 6     /// <returns>true or false</returns>  
 7     public static bool IsIPAddress(string str1)
 8     {
 9         if (str1 == null || str1 == string.Empty || str1.Length < 7 || str1.Length > 15) return false;
10         string regformat = @"^\d{1,3}[\.]\d{1,3}[\.]\d{1,3}[\.]\d{1,3}$";
11         Regex regex = new Regex(regformat, RegexOptions.IgnoreCase);
12         return regex.IsMatch(str1);
13     }
14     #endregion






获取ip

 #region 获得IP
    /// <summary>   
    /// 取得客户端真实IP。如果有代理则取第一个非内网地址   
    /// </summary>   
    public static string IPAddress
    {
        get
        {
            string result = String.Empty;
            result = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
            if (result != null && result != String.Empty)
            {
                //可能有代理   
                if (result.IndexOf(".") == -1)    //没有"."肯定是非IPv4格式   
                    result = null;
                else
                {
                    if (result.IndexOf(",") != -1)
                    {
                        //有",",估计多个代理。取第一个不是内网的IP。
                        result = result.Replace(" ", "").Replace("\"", "");
                        string[] temparyip = result.Split(",;".ToCharArray());
                        for (int i = 0; i < temparyip.Length; i++)
                        {
                            if (IsIPAddress(temparyip[i])
                                && temparyip[i].Substring(0, 3) != "10."
                                && temparyip[i].Substring(0, 7) != "192.168"
                                && temparyip[i].Substring(0, 7) != "172.16.")
                            {
                                return temparyip[i];    //找到不是内网的地址   
                            }
                        }
                    }
                    else if (IsIPAddress(result)) //代理即是IP格式   
                        return result;
                    else
                        result = null;    //代理中的内容 非IP,取IP   
                }
            }
            string IpAddress = (HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"] != null && HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"] != String.Empty) ? HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"] : HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
            if (null == result || result == String.Empty)
                result = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
            if (result == null || result == String.Empty)
                result = HttpContext.Current.Request.UserHostAddress;
            return result;
        }
    }
    #endregion







转换成日期格式

 1 #region 转换成日期格式
 2     /// <summary>
 3     /// 转换成日期格式,非日期返回空值
 4     /// </summary>
 5     /// <param name="Str">值</param>
 6     /// <returns></returns>
 7     public static string ToDate(string Str, string Format)
 8     {
 9         DateTime LDate;
10         DateTime dt1 = DateTime.Parse("1900-01-01");
11         DateTime dt2 = DateTime.Parse("9999-12-31");
12         if (DateTime.TryParse(Str, out LDate) && DateTime.Compare(LDate, dt1) > 0 && DateTime.Compare(LDate, dt2) < 0)
13         {
14             Str = LDate.ToString("" + Format + "");
15         }
16         else
17         {
18             Str = "";
19         }
20         return Str.Trim();
21     }
22     #endregion