.net 公共基礎類

来源:https://www.cnblogs.com/weijunyu/archive/2018/05/15/9043357.html
-Advertisement-
Play Games

using WL.Infrastructure.Http; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Text... ...


using WL.Infrastructure.Http;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Web;
using System.Drawing;
using System.Drawing.Imaging;
using System.Drawing.Drawing2D;

namespace WL.Infrastructure.Common
{
    public class Common
    {
        private static int seed = 1;
        private static int key_seed = 1;
        private static int noseed = 1;
        private static int domseed = 1;
        private static int geseed = 1;
        /// <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;
                if (result == "::1")
                {
                    result = "127.0.0.1";
                }
                return result;
            }
        }
        /// <summary>
        /// 繞過cnd獲取真實ip
        /// </summary>
        /// <returns></returns>
        public static string GetUserIp()
        {
            string userIP = "未獲取用戶IP";

            try
            {
                if (HttpContext.Current == null
            || HttpContext.Current.Request == null
            || HttpContext.Current.Request.ServerVariables == null)
                    return "";

                string CustomerIP = "";

                //CDN加速後取到的IP  
                CustomerIP = HttpContext.Current.Request.Headers["Cdn-Src-Ip"];
                if (!string.IsNullOrEmpty(CustomerIP))
                {
                    return CustomerIP;
                }

                CustomerIP = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];

                if (!String.IsNullOrEmpty(CustomerIP))
                    return CustomerIP;

                if (HttpContext.Current.Request.ServerVariables["HTTP_VIA"] != null)
                {
                    CustomerIP = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
                    if (CustomerIP == null)
                        CustomerIP = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
                }
                else
                {
                    CustomerIP = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];

                }

                if (string.Compare(CustomerIP, "unknown", true) == 0)
                    return HttpContext.Current.Request.UserHostAddress;
                return CustomerIP;
            }
            catch { }

            return userIP;
        }
        /**/
        /// <summary>
        /// 判斷是否是IP地址格式 0.0.0.0
        /// </summary>
        /// <param name="str1">待判斷的IP地址</param>
        /// <returns>true or false</returns>
        public static bool IsIPAddress(string str1)
        {
            if (str1 == null || str1 == string.Empty || str1.Length < 7 || str1.Length > 15) return false;

            string regformat = @"^/d{1,3}[/.]/d{1,3}[/.]/d{1,3}[/.]/d{1,3}$";

            Regex regex = new Regex(regformat, RegexOptions.IgnoreCase);
            return regex.IsMatch(str1);
        }
        /// <summary>
        /// 時間轉換時間戳
        /// </summary>
        /// <param name="time"></param>
        /// <returns></returns>
        public static string ConvertDateTimeInt(string time)
        {
            DateTime dtStart = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1));
            DateTime dtNow = DateTime.Parse(time);
            TimeSpan toNow = dtNow.Subtract(dtStart);
            string timeStamp = toNow.Ticks.ToString();
            timeStamp = timeStamp.Substring(0, timeStamp.Length - 7);
            return timeStamp;
        }
        /// <summary>
        /// 時間戳轉換時間
        /// </summary>
        /// <param name="datestr"></param>
        /// <returns></returns>
        public static DateTime ConvertDate(string datestr)
        {
            DateTime dtStart = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1));
            long lTime = long.Parse(datestr + "0000000");
            TimeSpan toNow = new TimeSpan(lTime);
            DateTime dtResult = dtStart.Add(toNow);
            return dtResult;
        }
        /// <summary>
        /// 轉換時間
        /// </summary>
        /// <param name="time"></param>
        /// <returns></returns>
        public static string ConvertDateTimeInt_flot(string time)
        {
            DateTime dtStart = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1));
            DateTime dtNow = DateTime.Parse(time);
            TimeSpan toNow = dtNow.Subtract(dtStart);
            string timeStamp = toNow.Ticks.ToString();
            timeStamp = timeStamp.Substring(0, timeStamp.Length - 4);
            return timeStamp;
        }
        /// <summary>
        /// 上傳
        /// </summary>
        /// <param name="_rootPath"></param>
        /// <param name="_file"></param>
        /// <param name="_filename"></param>
        /// <param name="type_s"></param>
        /// <returns></returns>
        public static string FileUploader(string _rootPath, HttpPostedFileBase _file, string _filename = null, string type_s = "")
        {
            string sFileName = _filename;
            if (_file != null)
            {
                string _filePath = _file.FileName;
                if (_filePath != string.Empty)
                {
                    string _fileType = _filePath.Substring(_filePath.LastIndexOf("."));
                    string sFileRoot = _rootPath;
                    if (!System.IO.Directory.Exists(sFileRoot))
                        System.IO.Directory.CreateDirectory(sFileRoot);
                    if (sFileName == null)
                    {
                        if (type_s != "")
                        {
                            sFileName = DateTime.Now.ToString("yyyyMMddHHmmssms") + type_s;
                        }
                        else
                        {
                            sFileName = DateTime.Now.ToString("yyyyMMddHHmmssms") + _fileType;
                        }
                    }
                    else
                    {
                        if (type_s != "")
                        {
                            sFileName = sFileName + type_s;
                        }
                        else
                        {
                            sFileName = sFileName + _fileType;
                        }
                    }
                    string sFilePath = sFileRoot + "\\" + sFileName;
                    _file.SaveAs(sFilePath);
                }
            }
            return sFileName;
        }
        /// <summary>
        /// 根據路徑把文件轉換成數據流
        /// </summary>
        /// <param name="strpath"></param>
        /// <returns></returns>
        public static byte[] Returnbyte(string strpath)
        {
            // 以二進位方式讀文件
            FileStream fsMyfile = new FileStream(strpath, FileMode.OpenOrCreate, FileAccess.ReadWrite);
            // 創建一個二進位數據流讀入器,和打開的文件關聯
            BinaryReader brMyfile = new BinaryReader(fsMyfile);
            // 把文件指針重新定位到文件的開始
            brMyfile.BaseStream.Seek(0, SeekOrigin.Begin);
            byte[] bytes = brMyfile.ReadBytes(Convert.ToInt32(fsMyfile.Length.ToString()));
            // 關閉以上new的各個對象
            brMyfile.Close();
            return bytes;
        }
        public static void DeleteFile(string filepatch)
        {
            FileInfo file = new FileInfo(filepatch);//指定文件路徑
            if (file.Exists)//判斷文件是否存在
            {
                file.Attributes = FileAttributes.Normal;//將文件屬性設置為普通,比方說只讀文件設置為普通
                file.Delete();//刪除文件
            }
        }
        /// 取得某月的第一天
        /// </summary>
        /// <param name="datetime">要取得月份第一天的時間</param>
        /// <returns></returns>
        private DateTime FirstDayOfMonth(DateTime datetime)
        {
            return datetime.AddDays(1 - datetime.Day);
        }
        /// <summary>
        /// 取得某月的最後一天
        /// </summary>
        /// <param name="datetime">要取得月份最後一天的時間</param>
        /// <returns></returns>
        private DateTime LastDayOfMonth(DateTime datetime)
        {
            return datetime.AddDays(1 - datetime.Day).AddMonths(1).AddDays(-1);
        }

        /// <summary>
        /// 取得上個月第一天
        /// </summary>
        /// <param name="datetime">要取得上個月第一天的當前時間</param>
        /// <returns></returns>
        public DateTime FirstDayOfPreviousMonth(DateTime datetime)
        {
            return datetime.AddDays(1 - datetime.Day).AddMonths(-1);
        }

        /// <summary>
        /// 取得上個月的最後一天
        /// </summary>
        /// <param name="datetime">要取得上個月最後一天的當前時間</param>
        /// <returns></returns>
        public DateTime LastDayOfPrdviousMonth(DateTime datetime)
        {
            return datetime.AddDays(1 - datetime.Day).AddDays(-1);
        }

        /// <summary>
        /// 取得上周的第一天
        /// </summary>
        /// <param name="datetime">要取得上周最後一天的當前時間</param>
        /// <returns></returns>
        public static DateTime FirstDayOfPrdviousWeek(DateTime datetime)
        {
            //星期一為第一天  
            int weeknow = Convert.ToInt32(datetime.DayOfWeek);
 
            //因為是以星期一為第一天,所以要判斷weeknow等於0時,要向前推6天。  
            weeknow = (weeknow == 0 ? (7 - 1) : (weeknow - 1));
            int daydiff = (-1) * weeknow;
 
            //本周第一天  
            string FirstDay = datetime.AddDays(daydiff).ToString("yyyy-MM-dd");
            return Convert.ToDateTime(FirstDay);
        }

        /// <summary>
        /// 取得上周的最後一天
        /// </summary>
        /// <param name="datetime">要取得上周最後一天的當前時間</param>
        /// <returns></returns>
        public static DateTime LastDayOfPrdviousWeek(DateTime datetime)
        {
            //星期天為最後一天  
            int weeknow = Convert.ToInt32(datetime.DayOfWeek);
            weeknow = (weeknow == 0 ? 7 : weeknow);
            int daydiff = (7 - weeknow);

            //本周最後一天  
            string LastDay = datetime.AddDays(daydiff).ToString("yyyy-MM-dd");
            return Convert.ToDateTime(LastDay);
        }

        /// <summary>
        /// 判斷字元串是否為正整數
        /// </summary>
        /// <param name="str">要判斷的字元串對象</param>
        /// <returns></returns>
        public static bool IsInt(string str)
        {
            bool isInt = false;
            if (!string.IsNullOrEmpty(str))
            {
                isInt = Regex.IsMatch(str, @"^(0|([1-9]\d*))$");
            }
            return isInt;
        }

        /// <summary>
        /// 判斷是否為DateTime
        /// </summary>
        /// <param name="strDate"></param>
        /// <returns></returns>
        public static bool IsDateTime(string strDate)
        {
            try
            {
                DateTime.Parse(strDate);
                return true;
            }
            catch
            {
                return false;
            }
        }

        /// <summary>
        /// 生成單號
        /// </summary>
        /// <param name="channel"></param>
        /// <returns></returns>
        public static string GetOrderNo()
        {
            if (seed == int.MaxValue)
            {
                seed = 1;
            }
            seed++;
            string tbout_trade_no = "";
            string guid = Guid.NewGuid().ToString();
            string last = guid.Replace("-", "");
            char[] cc = last.ToCharArray();
            StringBuilder sb = new StringBuilder(4);
            Random rd = new Random((unchecked((int)DateTime.Now.Ticks + seed)));
            for (int i = 0; i < 6; i++)
            {
                sb.Append(cc[rd.Next(cc.Length)]);
            }

            tbout_trade_no = sb + "-" + DateTime.Now.ToString("yyyyMMddHHmmssff");
            return tbout_trade_no;
        }
        /// <summary>
        /// 生成密匙
        /// </summary>
        /// <param name="mch_id"></param>
        /// <returns></returns>
        public static string GetGGAPIKey(string num_id)
        {
            if (key_seed == int.MaxValue)
            {
                key_seed = 1;
            }
            key_seed++;
            string key = "";
            char[] constant = {'0','1','2','3','4','5','6','7','8','9',
                               'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z',
                               'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};
            StringBuilder sb = new StringBuilder(4);
            for (int i = 0; i < 5; i++)
            {
                Random rd = new Random((unchecked((int)DateTime.Now.Ticks + i)));
                sb.Append(constant[rd.Next(62)]);
            }
            key = MD5.Md5UTF8(num_id + sb).ToLower();
            return key;
        }
        /// <summary>
        /// PostUTF8格式的JSON
        /// </summary>
        /// <param name="json"></param>
        /// <param name="url"></param>
        /// <returns></returns>
        public static string PostUtf8Json(string json, string url, int timeout = 1000000)
        {
            byte[] encodebytes = System.Text.Encoding.UTF8.GetBytes(json);
            HttpHelper helper = new HttpHelper();
            HttpItem item = new HttpItem();
            item.URL = url;
            item.Timeout = timeout;
            item.Method = "POST";
            item.PostdataByte = encodebytes;
            item.PostEncoding = Encoding.UTF8;
            item.PostDataType = PostDataType.Byte;
            HttpResult result = helper.GetHtml(item);
            string msg = "";
            if ((int)result.StatusCode < 400)
            {
                msg = result.Html;
                if (msg == "操作超時")
                {
                    //LoggerFactory.Current.Create().LogError("請求錯誤,狀態碼為" + (int)result.StatusCode + ",url為" + url);
                    msg = "";
                }
            }
            else
            {
                //LoggerFactory.Current.Create().LogError("請求錯誤,狀態碼為" + (int)result.StatusCode + ",url為" + url);
            }
            return msg;
        }
        /// <summary>
        /// PostUTF8格式的Form
        /// </summary>
        /// <param name="json"></param>
        /// <param name="url"></param>
        /// <returns></returns>
        public static string PostUtf8Form(string json, string url, int timeout = 1000000)
        {
            byte[] encodebytes = System.Text.Encoding.UTF8.GetBytes(json);
            HttpHelper helper = new HttpHelper();
            HttpItem item = new HttpItem();
            item.URL = url;
            item.Timeout = timeout;
            item.Method = "POST";
            item.Allowautoredirect = true;
            item.ContentType = "application/x-www-form-urlencoded";
            item.PostdataByte = encodebytes;
            item.PostEncoding = Encoding.UTF8;
            item.PostDataType = PostDataType.Byte;
            HttpResult result = helper.GetHtml(item);
            string msg = "";
            if ((int)result.StatusCode < 400)
            {
                msg = result.Html;
                if (msg == "操作超時")
                {
                    //LoggerFactory.Current.Create().LogError("請求錯誤,狀態碼為" + (int)result.StatusCode + ",url為" + url);
                    msg = "";
                }
            }
            else
            {
                //LoggerFactory.Current.Create().LogError("請求錯誤,狀態碼為" + (int)result.StatusCode + ",url為" + url);
            }
            return msg;
        }
        /// <summary>
        /// PostGB2312格式的表單
        /// </summary>
        /// <param name="json"></param>
        /// <param name="url"></param>
        /// <returns></returns>
        public static string PostGB2312Form(string json, string url, int timeout = 5000)
        {
            byte[] encodebytes = System.Text.Encoding.GetEncoding("GB2312").GetBytes(json);
            HttpHelper helper = new HttpHelper();
            HttpItem item = new HttpItem();
            item.URL = url;
            item.Timeout = timeout;
            item.Method = "POST";
            item.Allowautoredirect = true;
            item.ContentType = "application/x-www-form-urlencoded";
            item.PostdataByte = encodebytes;
            item.PostEncoding = Encoding.GetEncoding("GB2312");
            item.PostDataType = PostDataType.Byte;
            HttpResult result = helper.GetHtml(item);
            string msg = "";
            if ((int)result.StatusCode < 400)
            {
                msg = result.Html;
                if (msg == "操作超時")
                {
                    //LoggerFactory.Current.Create().LogError("請求錯誤,狀態碼為" + (int)result.StatusCode + ",url為" + url);
                    msg = "";
                }
            }
            else
            {
                //LoggerFactory.Current.Create().LogError("請求錯誤,狀態碼為" + (int)result.StatusCode + ",url為" + url);
            }
            return msg;
        }
        /// <summary>
        /// PostUTF8格式的JSON
        /// </summary>
        /// <param name="json"></param>
        /// <param name="url"></param>
        /// <returns></returns>
        public static string PostUtf8File(byte[] encodebytes, string url, int timeout = 1000000)
        {
            //byte[] encodebytes = System.Text.Encoding.UTF8.GetBytes(json);
            HttpHelper helper = new HttpHelper();
            HttpItem item = new HttpItem();
            item.URL = url;
            item.Timeout = timeout;
            item.Method = "POST";
            item.ContentType = "multipart/form-data";
            item.PostdataByte = encodebytes;
            item.PostEncoding = Encoding.UTF8;
            item.PostDataType = PostDataType.Byte;
            HttpResult result = helper.GetHtml(item);
            string msg = "";
            if ((int)result.StatusCode < 400)
            {
                msg = result.Html;
                if (msg == "操作超時")
                {
                    //LoggerFactory.Current.Create().LogError("請求錯誤,狀態碼為" + (int)result.StatusCode + ",url為" + url);
                    msg = "";
                }
            }
            else
            {
                //LoggerFactory.Current.Create().LogError("請求錯誤,狀態碼為" + (int)result.StatusCode + ",url為" + url);
            }
            return msg;
        }
        /// <summary>
        /// Get格式
        /// </summary>
        /// <param name="json"></param>
        /// <param name="url"></param>
        /// <returns></returns>
        public static string GetUrl(string url, int timeout = 1000000)
        {
            HttpHelper helper = new HttpHelper();
            HttpItem item = new HttpItem();
            item.Timeout = timeout;
            item.URL = url;
            HttpResult result = helper.GetHtml(item);
            string msg = "";
            if ((int)result.StatusCode < 400)
            {
                msg = result.Html;
                if (msg == "操作超時")
                {
                    //LoggerFactory.Current.Create().LogError("請求錯誤,狀態碼為" + (int)result.StatusCode + ",url為" + url);
                    msg = "";
                }
            }
            else
            {
                //LoggerFactory.Current.Create().LogError("請求錯誤,狀態碼為" + (int)result.StatusCode + ",url為" + url);
            }
            return msg;
        }
        /// <summary>
        /// 生成隨機字元串
        /// </summary>
        /// <returns></returns>
        public static string get_noce_str()
        {
            if (noseed == int.MaxValue)
            {
                noseed = 1;
            }
            noseed++;
            char[] constant = {'0','1','2','3','4','5','6','7','8','9',
                               'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z',
                               'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};
            StringBuilder sb = new StringBuilder(16);
            Random rd = new Random((unchecked((int)DateTime.Now.Ticks + noseed)));
            for (int i = 0; i < 16; i++)
            {
                sb.Append(constant[rd.Next(62)]);
            }
            return sb.ToString();
        }
        /// <summary>
        /// 生成6位邀請碼
        /// </summary>
        /// <returns></returns>
        public static string get_generate_str()
        {
            if (geseed == int.MaxValue)
            {
                geseed = 1;
            }
            geseed++;
            char[] constant = {'0','1','2','3','4','5','6','7','8','9',
                               'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z',
                               'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};
            StringBuilder sb = new StringBuilder(6);
            Random rd = new Random((unchecked((int)DateTime.Now.Ticks + geseed)));
            for (int i = 0; i < 6; i++)
            {
                sb.Append(constant[rd.Next(62)]);
            }
            return sb.ToString();
        }
        /// <summary>
        /// 生成6位訂單號
        /// </summary>
        /// <returns></returns>
        public static string Nrandom()
        {
            if (domseed == int.MaxValue)
            {
                domseed = 1;
            }
            domseed++;
            string rm = "";
            Random rd = new Random((unchecked((int)DateTime.Now.Ticks + domseed)));
            for (int i = 0; i < 6; i++)
            {
                rm += rd.Next(0, 9).ToString();
            }
            return rm;
        }
        /// <summary>
        /// 把數組所有元素,按照“參數=參數值”的模式用“&”字元拼接成字元串,並對參數值做urlencode
        /// </summary>
        /// <param name="sArray">需要拼接的數組</param>
        /// <param name="code">字元編碼</param>
        /// <returns>拼接完成以後的字元串</returns>
        public static string CreateLinkStringA(SortedDictionary<string, string> dicArray)
        {
            StringBuilder prestr = new StringBuilder();
            foreach (KeyValuePair<string, string> temp in dicArray)
            {
                prestr.Append(temp.Key + "=" + temp.Value + "&");
            }

            //去掉最後一個&字元
            int nLen = prestr.Length;
            prestr.Remove(nLen - 1, 1);

            return prestr.ToString();
        }
        /// <summary>
        /// 把數組所有元素,按照“參數=參數值”的模式用“&”字元拼接成字元串,並對參數值做urlencode
        /// </summary>
        /// <param name="sArray">需要拼接的數組</param>
        /// <param name="code">字元編碼</param>
        /// <returns>拼接完成以後的字元串</returns>
        public static string CreateLinkStringB(Dictionary<string, string> dicArray)
        {
            StringBuilder prestr = new StringBuilder();
            foreach (KeyValuePair<string, string> temp in dicArray)
            {
                prestr.Append(temp.Key + "=" + temp.Value + "&");
            }

            //去掉最後一個&字元
            int nLen = prestr.Length;
            prestr.Remove(nLen - 1, 1);

            return prestr.ToString();
        }
        /// <summary>
        /// 把數組所有元素,按照“參數值”的模式用“&”字元拼接成字元串,並對參數值做urlencode
        /// </summary>
        /// <param name="sArray">需要拼接的數組</param>
        /// <param name="code">字元編碼</param>
        /// <returns>拼接完成以後的字元串</returns>
        public static string CreateLinkStringC(Dictionary<string, string> dicArray)
        {
            StringBuilder prestr = new StringBuilder();
            foreach (KeyValuePair<string, string> temp in dicArray)
            {
                prestr.Append(temp.Value);
            }
            return prestr.ToString();
        }
        /// <summary>
        /// 多餘欄位用指定字元串代替
        /// </summary>
        /// <param name="MaxLength">字元串最大長度</param>
        /// <param name="ReplaceRemark">超出時代替的符號</param>
        /// <param name="value">要轉換的字元串</param>
        /// <returns></returns>
        public static string Overflow(int MaxLength, string ReplaceRemark, string value)
        {
            if (value.Length > MaxLength)
            {
                return value = value.Remove(MaxLength) + ReplaceRemark;
            }
            return value;
        }

        /// <summary>  
        /// 每隔n個字元插入n個字元  
        /// </summary>  
        /// <param name="input">源字元串</param>  
        /// <param name="interval">間隔字元數</param>  
        /// <param name="value">待插入值</param>  
        /// <returns>返回新生成字元串</returns>  
        public static string InsertFormat(string input, int interval, string value)
        {
            for (int i = interval; i < input.Length; i += interval + value.Length)
                input = input.Insert(i, value);
            return input;
        }

        /// <summary>
        /// 手機號碼隱藏中間4位
        /// </summary>
        /// <param name="phone"></param>
        /// <returns></returns>
        public static string HidePhone(string phone)
        {
            return Regex.Replace(phone, "(\\d{3})\\d{4}(\\d{4})", "$1****$2");
        }
        /// <summary>
        /// 判斷是否帶http,flase=有,ture=沒有
        /// </summary>
        /// <param name="url"></param>
        /// <returns></returns>
        public static bool IsHttp(string url)
        {
            string reg = @"^(http(s)?:\/\/)?(www\.)?[\w-]+(\.\w{2,4})?\.\w{2,4}?(\/)?$";
            Regex r = new Regex(reg);
            //給網址去所有空格
            string urlStr = url.Trim();
            Match m = r.Match(urlStr);

            //判斷是否帶http://
            if (!m.Success)
                return false;
            return true;
        }
        #region 得到一周的周一和周日的日期
        /// <summary> 
        /// 計算本周的周一日期 
        /// </summary> 
        /// <returns></returns> 
        public static DateTime GetMondayDate()
        {
            return GetMondayDate(DateTime.Now);
        }
        /// <summary> 
        /// 計算本周周日的日期 
        /// </summary> 
        /// <returns></returns> 
        public static DateTime GetSundayDate()
        {
            return GetSundayDate(DateTime.Now);
        }
        /// <summary> 
        /// 計算某日起始日期(禮拜一的日期) 
        /// </summary> 
        /// <param name="someDate">該周中任意一天</param> 
        /// <returns>返回禮拜一日期,後面的具體時、分、秒和傳入值相等</returns> 
        public static DateTime GetMondayDate(DateTime someDate)
        {
            int i = someDate.DayOfWeek - DayOfWeek.Monday;
            if (i == -1) i = 6;// i值 > = 0 ,因為枚舉原因,Sunday排在最前,此時Sunday-Monday=-1,必須+7=6。 
            TimeSpan ts = new TimeSpan(i, 0, 0, 0);
            return someDate.Subtract(ts);
        }
        /// <summary> 
        /// 計算某日結束日期(禮拜日的日期) 
        /// </summary> 
        /// <param name="someDate">該周中任意一天</param> 
        /// <returns>返回禮拜日日期,後面的具體時、分、秒和傳入值相等</returns> 
        public static DateTime GetSundayDate(DateTime someDate)
        {
            int i = someDate.DayOfWeek - DayOfWeek.Sunday;
            if (i != 0) i = 7 - i;// 因為枚舉原因,Sunday排在最前,相減間隔要被7減。 
            TimeSpan ts = new TimeSpan(i, 0, 0, 0);
            return someDate.Add(ts);
        }
        #endregion
    }
    public class ValidateCode
    {
        public ValidateCode()
        {
        }
        /// <summary>
        /// 驗證碼的最大長度
        /// </summary>
        public int MaxLength
        {
            get { return 10; }
        }
        /// <summary>
        /// 驗證碼的最小長度
        /// </summary>
        public int MinLength
        {
            get { return 1; }
        }
        /// <summary>
        /// 生成驗證碼
        /// </summary>
        /// <param name="length">指定驗證碼的長度</param>
        /// <returns></returns>
        public string CreateValidateCode(int length)
        {
            int[] randMembers = new int[length];
            int[] validateNums = new int[length];
            string validateNumberStr = "";
            //生成起始序列值
            int seekSeek = unchecked((int)DateTime.Now.Ticks);
            Random seekRand = new Random(seekSeek);
            int beginSeek = (int)seekRand.Next(0, Int32.MaxValue - length * 10000);
            int[] seeks = new int[length];
            for (int i = 0; i < length; i++)
            {
                beginSeek += 10000;
                seeks[i] = beginSeek;
            }
            //生成隨機數字
            for (int i = 0; i < length; i++)
            {
                Random rand = new Random(seeks[i]);
                int pownum = 1 * (int)Math.Pow(10, length);
                randMembers[i] = rand.Next(pownum, Int32.MaxValue);
            }
            //抽取隨機數字
            for (int i = 0; i < length; i++)
            {
                string numStr = randMembers[i].ToString();
                int numLength = numStr.Length;
                Random rand = new Random();
                int numPosition = rand.Next(0, numLength - 1);
                validateNums[i] = Int32.Parse(numStr.Substring(numPosition, 1));
            }
            //生成驗證碼
            for (int i = 0; i < length; i++)
            {
                validateNumberStr += validateNums[i].ToString();
            }
            return validateNumberStr;
        }
        /// <summary>
        /// 創建驗證碼的圖片
        /// </summary>
        /// <param name="context">要輸出到的page對象</param>
        /// <param name="validateNum">驗證碼</param>
        public void CreateValidateGraphic(string validateCode, HttpContext context)
        {
            Bitmap image = new Bitmap((int)Math.Ceiling(validateCode.Length * 12.0), 22);
            Graphics g = Graphics.FromImage(image);
            try
            {
                //生成隨機生成器
                Random random = new Random();
                //清空圖片背景色
                g.Clear(Color.White);
                //畫圖片的干擾線
                for (int i = 0; i < 25; i++)
                {
                    int x1 = random.Next(image.Width);
                    int x2 = random.Next(image.Width);
                    int y1 = random.Next(image.Height);
                    int y2 = random.Next(image.Height);
                    g.DrawLine(new Pen(Color.Silver), x1, y1, x2, y2);
                }
                Font font = new Font("Arial", 12, (FontStyle.Bold | FontStyle.Italic));
                LinearGradientBrush brush = new LinearGradientBrush(new Rectangle(0, 0, image.Width, image.Height),
                 Color.Blue, Color.DarkRed, 1.2f, true);
                g.DrawString(validateCode, font, brush, 3, 2);
                //畫圖片的前景干擾點
                for (int i = 0; i < 100; i++)
                {
                    int x = random.Next(image.Width);
                    int y = random.Next(image.Height);
                    image.SetPixel(x, y, Color.FromArgb(random.Next()));
                }
                //畫圖片的邊框線
                g.DrawRectangle(new Pen(Color.Silver), 0, 0, image.Width - 1, image.Height - 1);
                //保存圖片數據
                MemoryStream stream = new MemoryStream();
                image.Save(stream, ImageFormat.Jpeg);
                //輸出圖片流
                context.Response.Clear();
                context.Response.ContentType = "image/jpeg";
                context.Response.BinaryWrite(stream.ToArray());
            }
            finally
            {
                g.Dispose();
                image.Dispose();
            }
        }
        /// <summary>
        /// 得到驗證碼圖片的長度
        /// </summary>
        /// <param name="validateNumLength">驗證碼的長度</param>
        /// <returns></returns>
        public static int GetImageWidth(int validateNumLength)
        {
            return (int)(validateNumLength * 12.0);
        }
        /// <summary>
        /// 得到驗證碼的高度
        /// </summary>
        /// <returns></returns>
        public static double GetImageHeight()
        {
            return 22.5;
        }



        //C# MVC 升級版
        /// <summary>
        /// 創建驗證碼的圖片
        /// </summary>
        /// <param name="containsPage">要輸出到的page對象</param>
        /// <param name="validateNum">驗證碼</param>
        public byte[] CreateValidateGraphic(string validateCode)
        {
            Bitmap image = new Bitmap((int)Math.Ceiling(validateCode.Length * 12.0), 22);
            Graphics g = Graphics.FromImage(image);
            try
            {
                //生成隨機生成器
                Random random = new Random();
                //清空圖片背景色
                g.Clear(Color.White);
                //畫圖片的干擾線
                for (int i = 0; i < 25; i++)
                {
                    int x1 = random.Next(image.Width);
                    int x2 = random.Next(image.Width);
                    int y1 = random.Next(image.Height);
                    int y2 = random.Next(image.Height);
                    g.DrawLine(new Pen(Color.Silver), x1, y1, x2, y2);
                }
                Font font = new Font("Arial", 12, (FontStyle.Bold | FontStyle.Italic));
                LinearGradientBrush brush = new LinearGradientBrush(new Rectangle(0, 0, image.Width, image.Height),
                 Color.Blue, Color.DarkRed, 1.2f, true);
                g.DrawString(validateCode, font, brush, 3, 2);
                //畫圖片的前景干擾點
                for (int i = 0; i < 100; i++)
                {
                    int x = random.Next(image.Width);
                    int y = random.Next(image.Height);
                    image.SetPixel(x, y, Color.FromArgb(random.Next()));
                }
                //畫圖片的邊框線
                g.DrawRectangle(new Pen(Color.Silver), 0, 0, image.Width - 1, image.Height - 1);
                //保存圖片數據
                MemoryStream stream = new MemoryStream();
                image.Save(stream, ImageFormat.Jpeg);
                //輸出圖片流
                return stream.ToArray();
            }
            finally
            {
                g.Dispose();
                image.Dispose();
            }
        }
    }
}

  


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Python 之所以這麼流行得益於它適用於很多不同領域,目前 Python 使用最廣泛的領域包括有 Python Web(後端)開發、數據分析挖掘、網路爬蟲、機器學習人工智慧、運維開發等等。不管你選擇哪個方向,把Python基礎學牢有利於你在該領域更好的施展拳腳。 入門系列 《Python編程:從入 ...
  • 1.修改 list.get(i).name = name_1;一、封裝 1.成員變數增加private,在其他類訪問成員變數,無法訪問 2.無關成員方法,因為方法還用public來修飾 作用: 1、提高了代碼的復用性。 2、隱藏了實現細節,還要對外提供可以訪問的方式。便於調用者的使用。這是核心之一, ...
  • 二分搜索樹的特點 二分搜索樹首先是一個二叉樹,其次其必須滿足的條件是:每個節點的鍵值必須大於其左子節點,每個節點的鍵值必須小於其右子節點,這樣以左右孩子為根的子樹仍為二分搜索樹,需要註意的是,二分搜索樹不一定是一顆完全二叉樹。 深度優先遍歷 深度優先遍歷的基本思想:對每一個可能的分支路徑深入到不能再 ...
  • 有色彩的圖更加令人振奮。 第8章 圖8.4 圖8.5 圖8.6 圖8.7 ...
  • python重要模塊之subprocess模塊 我們經常要通過python去執行系統的命令或者腳本,系統的shell命令是獨立於你的python進程之外的,每執行一條命令,就相當於發起了一個新的進程,通過python調用系統命令或腳本的模塊。 之前我們也學到過和系統交互的模塊 os模塊 除了so.s ...
  • 類屬性 定義在類裡面,方法外面的屬性,一般屬於這個類,如下麵的 num 就是類屬性: 類屬性用 實例.類屬性 或者 類.類屬性 都可以訪問, 如 a = Test() 用 a.num 可以訪問 ,但是如果這個實例有一個實例屬性 self.num 那麼這樣訪問的其實是 self.num , 所以一般用 ...
  • 是不是很想知道那三步? 其實很簡單! 1、打開網頁,獲取源碼 2、獲取圖片 3、保存圖片地址與下載圖片 打開網頁,獲取源碼 *由於多人同時爬蟲某個網站時候,會造成數據冗餘,網站崩潰,所以一些網站是禁止爬蟲的,會返回403拒絕訪問的錯誤信息。 獲取不到想要的內容/請求失敗/IP容易被封……..等 *解 ...
  • 1.不包含包名 2.類名為:public class Main(){} 3.再就是輸入輸出格式符不符合題目要求了 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...