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;
                }
            }
        }
    

      

  • 相关阅读:
    Android AHandle AMessage
    android java 与C 通过 JNI双向通信
    android 系统给应用的jar
    UE4 unreliable 同步问题
    UE4 difference between servertravel and openlevel(多人游戏的关卡切换)
    UE4 Run On owing Client解析(RPC测试)
    UE4 TSubclassOf VS Native Pointer
    UE4 内容示例网络同步Learn
    UE4 多人FPS VR游戏制作笔记
    UE4 分层材质 Layerd Materials
  • 原文地址:https://www.cnblogs.com/5tomorrow/p/12200391.html
Copyright © 2011-2022 走看看