sym

namespace Ticket.Common
{
    using System;
    using System.Configuration;
    using System.Drawing;
    using System.Drawing.Imaging;
    using System.Globalization;
    using System.IO;
    using System.Text.RegularExpressions;
    using System.Web;
    using System.Web.UI;
    using System.Security.Cryptography;
    using System.Text;
    /// <summary>
    /// 系统信息类
    /// </summary>
    public class Sys
    {
        private static string _appPath = "";

        /// <summary>
        /// 生成验证码图片
        /// </summary>
        /// <param name="checkCode"></param>
        public static void CreateImage(string checkCode)
        {
            int width = (int)(checkCode.Length * 17.5);
            Bitmap image = new Bitmap(width, 25);

            Graphics graphics = Graphics.FromImage(image);
            Font font = new Font("Arial", 14, FontStyle.Bold);
            Brush brush = new SolidBrush(Color.FromArgb(0, 0, 0));

            graphics.Clear(Color.FromArgb(0xdb, 0xdb, 0xdb));


            graphics.DrawString(checkCode, font, brush, (float)3f, (float)3f);

            //线条颜色
            Pen pen = new Pen(Color.SlateGray, 0f);

            Random random = new Random();
            for (int i = 0; i < 2; i++)
            {
                int num3 = random.Next(image.Height);
                graphics.DrawEllipse(pen, 2, num3, image.Width, num3);
            }
            MemoryStream stream = new MemoryStream();
            image.Save(stream, ImageFormat.Jpeg);

            HttpContext.Current.Response.ClearContent();
            HttpContext.Current.Response.ContentType = "image/jpeg";
            HttpContext.Current.Response.BinaryWrite(stream.ToArray());


            stream.Close();
            graphics.Dispose();
            image.Dispose();
        }
        /// <summary>
        /// 生成随机码
        /// </summary>
        /// <param name="codeCount">代码位数</param>
        /// <returns>字符串</returns>
        public static string CreateRandomCode(int codeCount)
        {
            //,a,b,c,d,e,f,g,h,i,j,k,k,m,n,n,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,J,J,K,L,M,N,P,P,Q,R,S,T,U,W,X,Y,Z
            string[] strArray = "0,1,2,3,4,5,6,7,8,9".Split(new char[] { ',' });
            string str2 = "";
            int num = -1;
            Random random = new Random();
            for (int i = 0; i < codeCount; i++)
            {
                if (num != -1)
                {
                    random = new Random((i * num) * ((int)DateTime.Now.Ticks));
                }
                int index = random.Next(10);
                if (num == index)
                {
                    return CreateRandomCode(codeCount);
                }
                num = index;
                str2 = str2 + strArray[index];
            }
            return str2;
        }

        /// <summary>
        /// 进行DES加密。
        /// </summary>
        /// <param name="pToEncrypt">要加密的字符串。</param>
        /// <param name="sKey">密钥,且必须为8位。</param>
        /// <returns>以Base64格式返回的加密字符串。</returns>
        public static string Encrypt(string encryptData, string sKey)
        {
            //string str = "";
            //if (!string.IsNullOrEmpty(encryptData))
            //{
            //      using (DESCryptoServiceProvider des = new DESCryptoServiceProvider())
            //      {
            //            byte[] inputByteArray = Encoding.UTF8.GetBytes(encryptData);
            //            des.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
            //            des.IV = ASCIIEncoding.ASCII.GetBytes(sKey);
            //            System.IO.MemoryStream ms = new System.IO.MemoryStream();
            //            using (CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write))
            //            {
            //                  cs.Write(inputByteArray, 0, inputByteArray.Length);
            //                  cs.FlushFinalBlock();
            //                  cs.Close();
            //            }
            //            str = Convert.ToBase64String(ms.ToArray());
            //            ms.Close();

            //      }
            //}
            //return str
            PasswordDeriveBytes pd = new PasswordDeriveBytes(sKey, null);
            byte[] deskey = pd.GetBytes(24);//3DES Key为24位
            byte[] desiv = pd.GetBytes(8);//3DES Key为8位

            byte[] data = Encoding.GetEncoding("GB2312").GetBytes(encryptData);
            TripleDESCryptoServiceProvider des = new TripleDESCryptoServiceProvider();
            des.IV = desiv;
            des.Key = deskey;
            des.Mode = CipherMode.ECB;
            des.Padding = PaddingMode.Zeros;
            ICryptoTransform desdecrypt = des.CreateEncryptor();
            byte[] chipcolk = desdecrypt.TransformFinalBlock(data, 0, data.Length);
            return Convert.ToBase64String(chipcolk);// Encoding.Default.GetString(chipcolk);
        }


        /// <summary>
        /// 进行DES解密。
        /// </summary>
        /// <param name="descryptData">要解密的以Base64</param>
        /// <param name="sKey">密钥,且必须为8位。</param>
        /// <returns>已解密的字符串。</returns>
        public static string Decrypt(string descryptData, string sKey)
        {
            //string str = "";
            //if (!string.IsNullOrEmpty(descryptData))
            //{
            //      byte[] inputByteArray = Convert.FromBase64String(descryptData);
            //      using (DESCryptoServiceProvider des = new DESCryptoServiceProvider())
            //      {
            //            des.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
            //            des.IV = ASCIIEncoding.ASCII.GetBytes(sKey);
            //            System.IO.MemoryStream ms = new System.IO.MemoryStream();
            //            using (CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write))
            //            {
            //                  cs.Write(inputByteArray, 0, inputByteArray.Length);
            //                  cs.FlushFinalBlock();
            //                  cs.Close();
            //            }
            //            str = Encoding.UTF8.GetString(ms.ToArray());
            //            ms.Close();

            //      }
            //}

            //return str;
            PasswordDeriveBytes pd = new PasswordDeriveBytes(sKey, null);
            byte[] deskey = pd.GetBytes(24);//3DES Key为24位
            byte[] desiv = pd.GetBytes(8);//3DES Key为8位

            byte[] data = Convert.FromBase64String(descryptData);// Encoding.Default.GetBytes(chipertext);           
            TripleDESCryptoServiceProvider des = new TripleDESCryptoServiceProvider();
            des.IV = desiv;
            des.Key = deskey;
            des.Mode = CipherMode.ECB;
            des.Padding = PaddingMode.Zeros;
            ICryptoTransform desdecrypt = des.CreateDecryptor();
            byte[] chipcolk = desdecrypt.TransformFinalBlock(data, 0, data.Length);
            string strSource = Encoding.GetEncoding("GB2312").GetString(chipcolk);
            return strSource.Replace("/0", "");
        }

        /// <summary>
        /// 打印输出
        /// </summary>
        public static void Write(object obj)
        {

            HttpContext.Current.Response.Write(obj);
        }
        /// <summary>
        /// Url编码
        /// </summary>
        /// <param name="s"></param>
        /// <returns></returns>
        public static string UrlEncode(string s)
        {
            return HttpContext.Current.Server.UrlEncode(s);
        }
        /// <summary>
        /// Url解码
        /// </summary>
        /// <param name="s"></param>
        /// <returns></returns>
        public static string UrlDecode(string s)
        {
            return HttpContext.Current.Server.UrlDecode(s);
        }
        /// <summary>
        /// 终止执行
        /// </summary>
        public static void End()
        {

            HttpContext.Current.Response.End();
        }
        /// <summary>
        /// 格式化数值小数点位数
        /// </summary>
        /// <param name="NumberDigits">位数</param>
        /// <returns></returns>
        public static NumberFormatInfo FormatToFixed(int NumberDigits)
        {
            NumberFormatInfo numberFormat = new CultureInfo("zh-cn", false).NumberFormat;
            numberFormat.NumberDecimalDigits = NumberDigits;
            return numberFormat;
        }
        /// <summary>
        /// 转换成ASCII码
        /// </summary>
        /// <param name="obj">转换对象</param>
        /// <returns></returns>
        public static int GetCharToAsc(object obj)
        {
            return (short)Convert.ToChar(obj);
        }
        /// <summary>
        /// 根据路径地址获取文件名
        /// </summary>
        /// <param name="path">路径地址</param>
        /// <returns></returns>
        public static string GetFileName(string path)
        {
            string str = path;
            int startIndex = str.LastIndexOf(@"/") + 1;
            return str.Substring(startIndex);
        }
        /// <summary>
        /// Ascii码转字符
        /// </summary>
        /// <param name="obj"></param>
        /// <returns></returns>
        public static char GetNumToAsc(int obj)
        {
            return Convert.ToChar(obj);
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="obj"></param>
        /// <returns></returns>
        public static string GetRegTxt(string obj)
        {
            string str = obj;
            if (str != null)
            {
                str = obj.Replace("'", "’");
            }
            return str;
        }
        /// <summary>
        /// 获取随机数
        /// </summary>
        /// <returns></returns>
        public static string GetRndNumber()
        {
            string sDateTime = DateTime.Now.ToString("yyyymmddhhmmssFFF");
            Random random = new Random();
            return (sDateTime + Convert.ToInt64((double)(random.NextDouble() * 10000000)));
        }
        /// <summary>
        /// Html解码
        /// </summary>
        /// <param name="strHtml"></param>
        /// <returns></returns>
        public static string HtmlDecode(string strHtml)
        {
            string s = strHtml;
            return HttpContext.Current.Server.HtmlDecode(s).Replace("/&amp;/g", "&").Replace("/&quot;/g", "/"").Replace("/&lt;/g", "<").Replace("/&gt;/g", ">").Replace("/'/g", "'").Replace("/&nbsp;/g", @"/ ").Replace("//n/g", "<br>").Replace("//t/g", "&nbsp;&nbsp;&nbsp;&nbsp;");
        }
        /// <summary>
        /// 是否为小数
        /// </summary>
        /// <param name="theNum"></param>
        /// <returns></returns>
        public static bool IsDigit(object theNum)
        {
            string str = "0123456789";
            if (IsEmpty(theNum))
            {
                return false;
            }
            if (str.IndexOf(theNum.ToString()) == -1)
            {
                return false;
            }
            return true;
        }
        /// <summary>
        /// 是否为空
        /// </summary>
        /// <param name="str"></param>
        /// <returns></returns>
        public static bool IsEmpty(object str)
        {
            string str2 = str.ToString();
            if ((str != null) && (str2.Length != 0))
            {
                return false;
            }
            return true;
        }
        /// <summary>
        /// 是否为整数
        /// </summary>
        /// <param name="theStr"></param>
        /// <returns></returns>
        public static bool IsInt(object theStr)
        {
            if (IsEmpty(theStr))
            {
                return false;
            }
            string str = theStr.ToString();
            for (int i = 0; i < str.Length; i++)
            {
                if (!IsDigit(str.Substring(i, i + 1)))
                {
                    return false;
                }
            }
            return true;
        }
        /// <summary>
        /// 是否为数值
        /// </summary>
        /// <param name="str"></param>
        /// <returns></returns>
        public static bool IsNumber(object str)
        {
            if (str != null)
            {
                Regex regex = new Regex(@"^[-]?/d+[.]?/d*$");
                return regex.IsMatch(str.ToString());
            }
            return false;
        }
        /// <summary>
        /// 打印输出
        /// </summary>
        /// <param name="obj"></param>
        public static void Out(object obj)
        {
            HttpContext.Current.Response.Write(obj);
        }
        /// <summary>
        /// 获取当前应用程序路径
        /// </summary>
        public static string ApplicationPath
        {
            get
            {
                _appPath = HttpContext.Current.Request.ApplicationPath;
                if (!(_appPath == "/"))
                {
                    return _appPath;
                }
                return "";
            }
        }

        /// <summary>
        /// 获取当前文件名
        /// </summary>
        public static string FileName
        {
            get
            {
                string filePath = HttpContext.Current.Request.FilePath;
                int startIndex = filePath.LastIndexOf("/") + 1;
                int length = filePath.LastIndexOf(".") - startIndex;
                return filePath.Substring(startIndex, length);
            }
        }


        /// <summary>
        /// 根据 User Agent 获取操作系统名称
        /// </summary>
        public static string GetOSNameByUserAgent(string userAgent)
        {
            string osVersion = "未知";

            if (userAgent.Contains("NT 6.0"))
            {
                osVersion = "Windows Vista/Server 2008";
            }
            else if (userAgent.Contains("NT 5.2"))
            {
                osVersion = "Windows Server 2003";
            }
            else if (userAgent.Contains("NT 5.1"))
            {
                osVersion = "Windows XP";
            }
            else if (userAgent.Contains("NT 5"))
            {
                osVersion = "Windows 2000";
            }
            else if (userAgent.Contains("NT 4"))
            {
                osVersion = "Windows NT4";
            }
            else if (userAgent.Contains("Me"))
            {
                osVersion = "Windows Me";
            }
            else if (userAgent.Contains("98"))
            {
                osVersion = "Windows 98";
            }
            else if (userAgent.Contains("95"))
            {
                osVersion = "Windows 95";
            }
            else if (userAgent.Contains("Mac"))
            {
                osVersion = "Mac";
            }
            else if (userAgent.Contains("Unix"))
            {
                osVersion = "UNIX";
            }
            else if (userAgent.Contains("Linux"))
            {
                osVersion = "Linux";
            }
            else if (userAgent.Contains("SunOS"))
            {
                osVersion = "SunOS";
            }
            return osVersion;
        }


        /// <summary>
        /// 字符串如果操过指定长度则将超出的部分用指定字符串代替
        /// </summary>
        /// <param name="p_SrcString">要检查的字符串</param>
        /// <param name="p_Length">指定长度</param>
        /// <param name="p_TailString">用于替换的字符串</param>
        /// <returns>截取后的字符串</returns>
        public static string GetSubString(string p_SrcString, int p_Length, string p_TailString)
        {
            return GetSubString(p_SrcString, 0, p_Length, p_TailString);
        }

        /// <summary>
        /// 取指定长度的字符串
        /// </summary>
        /// <param name="p_SrcString">要检查的字符串</param>
        /// <param name="p_StartIndex">起始位置</param>
        /// <param name="p_Length">指定长度</param>
        /// <param name="p_TailString">用于替换的字符串</param>
        /// <returns>截取后的字符串</returns>
        public static string GetSubString(string p_SrcString, int p_StartIndex, int p_Length, string p_TailString)
        {


            string myResult = p_SrcString;

            //当是日文或韩文时(注:中文的范围:/u4e00 - /u9fa5, 日文在/u0800 - /u4e00, 韩文为/xAC00-/xD7A3)
            if (System.Text.RegularExpressions.Regex.IsMatch(p_SrcString, "[/u0800-/u4e00]+") ||
                System.Text.RegularExpressions.Regex.IsMatch(p_SrcString, "[/xAC00-/xD7A3]+"))
            {
                //当截取的起始位置超出字段串长度时
                if (p_StartIndex >= p_SrcString.Length)
                {
                    return "";
                }
                else
                {
                    return p_SrcString.Substring(p_StartIndex,
                                                   ((p_Length + p_StartIndex) > p_SrcString.Length) ? (p_SrcString.Length - p_StartIndex) : p_Length);
                }
            }
            if (p_Length >= 0)
            {
                byte[] bsSrcString = Encoding.Default.GetBytes(p_SrcString);

                //当字符串长度大于起始位置
                if (bsSrcString.Length > p_StartIndex)
                {
                    int p_EndIndex = bsSrcString.Length;

                    //当要截取的长度在字符串的有效长度范围内
                    if (bsSrcString.Length > (p_StartIndex + p_Length))
                    {
                        p_EndIndex = p_Length + p_StartIndex;
                    }
                    else
                    {   //当不在有效范围内时,只取到字符串的结尾

                        p_Length = bsSrcString.Length - p_StartIndex;
                        p_TailString = "";
                    }

 

                    int nRealLength = p_Length;
                    int[] anResultFlag = new int[p_Length];
                    byte[] bsResult = null;

                    int nFlag = 0;
                    for (int i = p_StartIndex; i < p_EndIndex; i++)
                    {

                        if (bsSrcString[i] > 127)
                        {
                            nFlag++;
                            if (nFlag == 3)
                            {
                                nFlag = 1;
                            }
                        }
                        else
                        {
                            nFlag = 0;
                        }

                        anResultFlag[i] = nFlag;
                    }

                    if ((bsSrcString[p_EndIndex - 1] > 127) && (anResultFlag[p_Length - 1] == 1))
                    {
                        nRealLength = p_Length + 1;
                    }

                    bsResult = new byte[nRealLength];

                    Array.Copy(bsSrcString, p_StartIndex, bsResult, 0, nRealLength);

                    myResult = Encoding.Default.GetString(bsResult);

                    myResult = myResult + p_TailString;
                }
            }

            return myResult;
        }

        /// <summary>
        /// 获得当前页面客户端的IP
        /// </summary>
        /// <returns>当前页面客户端的IP</returns>
        public static string GetIP()
        {


            string result = String.Empty;

            result = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
            if (null == result || result == String.Empty)
            {
                result = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
            }

            if (null == result || result == String.Empty)
            {
                result = HttpContext.Current.Request.UserHostAddress;
            }

            if (null == result || result == String.Empty || !IsIP(result))
            {
                return "0.0.0.0";
            }

            return result;

        }

        /// <summary>
        /// 是否为ip
        /// </summary>
        /// <param name="ip"></param>
        /// <returns></returns>
        public static bool IsIP(string ip)
        {
            return Regex.IsMatch(ip, @"^((2[0-4]/d|25[0-5]|[01]?/d/d?)/.){3}(2[0-4]/d|25[0-5]|[01]?/d/d?)$");

        }
        /// <summary>
        /// 转全角的函数(SBC case)
        /// </summary>
        /// <param name="input">任意字符串</param>
        /// <returns>全角字符串</returns>
        ///<remarks>
        ///全角空格为12288,半角空格为32
        ///其他字符半角(33-126)与全角(65281-65374)的对应关系是:均相差65248
        ///</remarks>       
        public static string ToSBC(string input)
        {
            //半角转全角:
            char[] c = input.ToCharArray();
            for (int i = 0; i < c.Length; i++)
            {
                if (c[i] == 32)
                {
                    c[i] = (char)12288;
                    continue;
                }
                if (c[i] < 127)
                    c[i] = (char)(c[i] + 65248);
            }
            return new string(c);
        }


        /// <summary>
        /// 转半角的函数(DBC case)
        /// </summary>
        /// <param name="input">任意字符串</param>
        /// <returns>半角字符串</returns>
        ///<remarks>
        ///全角空格为12288,半角空格为32
        ///其他字符半角(33-126)与全角(65281-65374)的对应关系是:均相差65248
        ///</remarks>
        public static string ToDBC(string input)
        {
            char[] c = input.ToCharArray();
            for (int i = 0; i < c.Length; i++)
            {
                if (c[i] == 12288)
                {
                    c[i] = (char)32;
                    continue;
                }
                if (c[i] > 65280 && c[i] < 65375)
                    c[i] = (char)(c[i] - 65248);
            }
            return new string(c);
        }
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值