zoukankan      html  css  js  c++  java
  • 验证码

    ===================================效果图==================================

     

    ===================================代码====================================

      /// <summary>
        /// 验证码生成
        /// </summary>
        public class VerificationCodeHelper
        {
            //定义颜色 
            private static Color[] colors = { Color.Black, Color.Red, Color.DarkBlue, Color.Green, Color.Orange, Color.Brown, Color.DarkCyan, Color.Purple };
            //定义字体
            private static string font = "宋体";
            //定义验证码字符及出现频次 ,避免出现0 o j i l 1 x;  
            private static String charCollection = "ASDFGHZCVBNMKQWERTYUP";
            //字体大小
            private static int fontSize = 23;
            //旋转角度
            private static int angle = 30;
    
    
            /// <summary>
            /// 验证码生成
            /// </summary>
            /// <param name="guid">缓存标识</param>
            /// <param name="length">字符个数</param>
            /// <param name="width">宽度</param>
            /// <param name="height">高度</param>
            /// <returns></returns>
            public static byte[] GetBitmapCode(string guid, int width, int height, int length = 4)
            {
                string codes = "";
                string code;
                int codeX = width / (length + 1);
                Random random = new Random();
                using (Bitmap image = new Bitmap(width, height))
                {
                    using (Graphics g = Graphics.FromImage(image))
                    {
                        //清空图片背景色 
                        g.Clear(Color.FromArgb(247, 247, 247));
                        g.FillRectangle(new SolidBrush(Color.FromArgb(247, 247, 247)), 0, 0, image.Width, image.Height);
                        //画图片的背景噪音线 
                        for (int i = 0; i < 5; i++)
                        {
                            g.DrawLine(new Pen(colors[random.Next(colors.Length)]), random.Next(image.Width), random.Next(image.Height), random.Next(image.Width), random.Next(image.Height));
                        }
    
    
                        //文字距中  
                        StringFormat format = new StringFormat(StringFormatFlags.NoClip);
                        format.Alignment = StringAlignment.Center;
                        format.LineAlignment = StringAlignment.Near;
    
                        using (Font f = new Font(font, fontSize, FontStyle.Regular))
                        {
                            using (Brush b = new SolidBrush(colors[random.Next(colors.Length)]))
                            {
                                for (int i = 0; i < length; i++)
                                {
                                    code = charCollection[random.Next(0, charCollection.Length)].ToString();
                                    SizeF sizeF = g.MeasureString(code, f);
                                    PointF dot = new PointF(codeX, random.Next(image.Height / 3));
    
                                    g.TranslateTransform(dot.X, dot.Y);//移动光标到指定位置  
                                    int rAngel = random.Next(-angle, angle);
                                    g.RotateTransform(rAngel);
    
    
                                    g.DrawString(code, f, b, 1, 1, format);
    
                                    g.RotateTransform(-rAngel);//转回去  
                                    g.TranslateTransform(2, -dot.Y);//移动光标到指定位置  
    
                                    codes += code;
                                }
                            }
                        }
                        //返回图片数据
                        using (System.IO.MemoryStream ms = new System.IO.MemoryStream())
                        {
                            image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
                            SaveToChache(guid, codes);
                            return ms.ToArray();
                        }
                    }
                }
            }
    
    
    
            /// <summary>
            /// 保存验证码到内存中
            /// </summary>
            /// <param name="cacheFlag"></param>
            /// <param name="code"></param>
            public static void SaveToChache(string cacheFlag, string code)
            {
                string cacheName = RedisHelper.GetCacheName(RedisCacheType.VerificationCode, cacheFlag);
                RedisHelper.Instance.SetCache(cacheName, code, TimeSpan.FromMinutes(5), ExpirType.Absolute);
            }
    
            /// <summary>
            /// 验证验证码是否正确
            /// </summary>
            /// <param name="cacheFlag"></param>
            /// <param name="code"></param>
            /// <returns></returns>
            public static string CheckCode(string cacheFlag, string code)
            {
                string cacheName = RedisHelper.GetCacheName(RedisCacheType.VerificationCode, cacheFlag);
                string cacheCode = RedisHelper.Instance.GetCache(cacheName);
                if (cacheCode == null)
                {
                    return "验证码已过期,请重新输入!";
                }
                else
                {
                    RedisHelper.Instance.RemoveCache(cacheName);
                    if (cacheCode.Equals(code, StringComparison.OrdinalIgnoreCase) == false)
                    {
                        return "验证码错误,请重新输入!";
                    }
                    return null;
                }
            }
        }
    

      

  • 相关阅读:
    Mongodb复制集配置
    Alluxio部署(集群模式)
    【性能-windows端口限制】TPS上不去,应用无压力只有cpu5%,tomcat线程最高1500,增大并发出现connect 报错
    SQL优化(三)—— 索引、explain分析
    vbs,修改文件名
    Fiddler的详细介绍
    Fiddler 抓包工具总结
    从零开始学习jQuery (一) 开天辟地入门篇
    Jmeter关联之正则表达式提取器(完整版)
    Jmeter实现百分比业务比例
  • 原文地址:https://www.cnblogs.com/5tomorrow/p/12200391.html
Copyright © 2011-2022 走看看