• mvc验证码图片生成


     /// <summary>
        ///生成验证码
        /// </summary>
        public class VerifyCode
        {
            /// <summary>
            /// 生成验证码
            /// </summary>
            /// <returns></returns>
            public byte[] GetVerifyCode()
            {
                int codeW = 80;
                int codeH = 30;
                int fontSize = 16;
                string chkCode = string.Empty;
                //颜色列表,用于验证码、噪线、噪点 
                Color[] color = { Color.Black, Color.Red, Color.Blue, Color.Green, Color.Orange, Color.Brown, Color.Brown, Color.DarkBlue };
                //字体列表,用于验证码 
                string[] font = { "Times New Roman" };
                //验证码的字符集,去掉了一些容易混淆的字符 
                char[] character = { '2', '3', '4', '5', '6', '8', '9', 'a', 'b', 'd', 'e', 'f', 'h', 'k', 'm', 'n', 'r', 'x', 'y', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'J', 'K', 'L', 'M', 'N', 'P', 'R', 'S', 'T', 'W', 'X', 'Y' };
                Random rnd = new Random();
                //生成验证码字符串 
                for (int i = 0; i < 4; i++)
                {
                    chkCode += character[rnd.Next(character.Length)];
                }
                //写入Session、验证码加密
                HttpContext.Current.Session("session_verifycode", MD5PassWordProvider.CutMD5(chkCode.ToLower(),16));
                //创建画布
                Bitmap bmp = new Bitmap(codeW, codeH);
                Graphics g = Graphics.FromImage(bmp);
                g.Clear(Color.White);
                //画噪线 
                for (int i = 0; i < 1; i++)
                {
                    int x1 = rnd.Next(codeW);
                    int y1 = rnd.Next(codeH);
                    int x2 = rnd.Next(codeW);
                    int y2 = rnd.Next(codeH);
                    Color clr = color[rnd.Next(color.Length)];
                    g.DrawLine(new Pen(clr), x1, y1, x2, y2);
                }
                //画验证码字符串 
                for (int i = 0; i < chkCode.Length; i++)
                {
                    string fnt = font[rnd.Next(font.Length)];
                    Font ft = new Font(fnt, fontSize);
                    Color clr = color[rnd.Next(color.Length)];
                    g.DrawString(chkCode[i].ToString(), ft, new SolidBrush(clr), (float)i * 18, (float)0);
                }
                //将验证码图片写入内存流,并将其以 "image/Png" 格式输出 
                MemoryStream ms = new MemoryStream();
                try
                {
                    bmp.Save(ms, ImageFormat.Png);
                    return ms.ToArray();
                }
                catch (Exception)
                {
                    return null;
                }
                finally
                {
                    g.Dispose();
                    bmp.Dispose();
                }
            }
        }
    
    //MD5加密
     #region 将普通字符串转成MD5字符串
        /// <summary>
        /// 将普通字符串转成MD5字符串
        /// </summary>
        public static class MD5PassWordProvider
        {
            public static string Hash(string message)
            {
                if (string.IsNullOrEmpty(message))
                {
                    return string.Empty;
                }
                else
                {
                    MD5 md5 = MD5.Create();
                    byte[] source = Encoding.UTF8.GetBytes(message);
                    byte[] result = md5.ComputeHash(source);
                    StringBuilder buffer = new StringBuilder(result.Length);
    
                    for (int i = 0; i < result.Length; i++)
                    {
                        buffer.Append(result[i].ToString("x"));
                    }
                    return buffer.ToString();
                }
            }
            /// <summary>
            /// MD5加密验证码
            /// </summary>
            public static string CutMD5(string str, int code)
            {
                string strEncrypt = string.Empty;
                if (code == 16)
                {
                    strEncrypt = Hash(str).Substring(8, 16);
                }
                return strEncrypt;
            }
        }
        #endregio

    mvc中使用

    /// <summary>
            /// 生成验证码
            /// </summary>
            [HttpGet]
            public ActionResult VerifyCode()
            {
                return File(new VerifyCode().GetVerifyCode(), @"image/Gif");
            }

    cshtml中显示及刷新

    <img id="login_verifycode" class="login_verifycode" src="~/Login/VerifyCode" alt="点击切换验证码"
                                     title="点击切换验证码"/>
    
    //样式
    .login_verifycode{
        float: right;
        margin-top: 1px;
        display:inline-block;
        text-align:center;
        cursor:pointer;
         100px;
        height: 36px;
        padding-right: 0;
        padding-left: 0;
        /*border: 1px solid #d5d5d5;*/
        font-size: 14px;
        color: #727272;
        background: white;
        margin-left:-4px;
        border-top-right-radius: 5px;
        border-bottom-right-radius: 5px;
    }
    
    //js
    //点击切换验证码
            $("#login_verifycode").click(function () {
                $("#code").val('');//验证码的输入
                $("#login_verifycode").attr("src", contentPath + "/Login/VerifyCode?time=" + Math.random());
            });
  • 相关阅读:
    大话设计模式(二)代理模式 工厂方法模式 原型模式 模板方法模式 迪米特法模式 外观模式
    大话设计模式(一)简单工厂模式 策略模式 单一职责原则 开放-封闭原则 依赖倒置原则 装饰模式
    eclipse为hibernate.cfg.xml添加自动提示【转】
    Caused by: java.lang.NoSuchMethodError: javax.persistence.spi.PersistenceUnitInfo.getValidationMode
    Chrome 浏览器提示adobe flash player不是最新版本
    spring mvc <mvc:default-servlet-handler /> 。
    S2SH CRUD 整合
    Ms sql行转列。汇总
    Hibernate中的数据库方言(Dialect)
    SSH整合(1)异常
  • 原文地址:https://www.cnblogs.com/shuaimeng/p/10559301.html
Copyright © 2020-2023  润新知