zoukankan      html  css  js  c++  java
  • .net 项目学习总结 day01 验证码实现

    第一步,花验证码   纯数字验证码,包含干扰点,无线
    
     1  /// <summary>
     2     /// ValidateCode 的摘要说明
     3     /// </summary>
     4     public class ValidateCode : IHttpHandler,IRequiresSessionState
     5     {
     6         HttpContext context;//新建
     7         public void ProcessRequest(HttpContext context1)
     8         {
     9             this.context = context1;//一个获取 一个新建   实现刷新
    10             CreateCheckCodeImage(GenreateCheckCode());//生成验证码
    11         }
    12         /// <summary>
    13         /// 生成验证码文本
    14         /// </summary>
    15         /// <returns></returns>
    16         private string GenreateCheckCode()
    17         {
    18             int number;
    19             char code;
    20             string checkCode = string.Empty;
    21 
    22             System.Random random = new Random();
    23             for (int i = 0; i < 5; i++)
    24             {
    25                 number = random.Next();
    26                 if(number%2==0)
    27                     code=(char)('0'+(char)(number%10));
    28                 else
                            code=(char)('0'+(char)(number%10));
                //code = (char)('A' + (char)(number % 26));  
    30                 checkCode += code.ToString();
    31             }
    32             context.Session.Add("vCode", checkCode);
    33             return checkCode;
    34         }
    35 
    36         private void CreateCheckCodeImage(string checkCode)
    37         {
    38             if (checkCode == null || checkCode.Trim() == string.Empty)
    39                 return;
    40 
    41             System.Drawing.Bitmap image = new System.Drawing.Bitmap((int)Math.Ceiling((checkCode.Length * 12.5)), 22);
    42             Graphics g = Graphics.FromImage(image);
    43 
    44             try
    45             {
    46                 //生成随机生成器
    47                 Random random = new Random();
    48                 //清空图片背景
    49                 g.Clear(Color.White);
    50                 //画图片的背景噪音线
    51                 for (int i = 0; i < 25; i++)
    52                 {
    53                     int x1 = random.Next(image.Width);
    54                     int x2 = random.Next(image.Width);
    55                     int y1 = random.Next(image.Height);
    56                     int y2 = random.Next(image.Height);
    57 
    58                     g.DrawLine(new Pen(Color.Silver), x1, y1, x2, y2);
    59 
    60                 }
    61                 Font font = new System.Drawing.Font("Arial", 12, (System.Drawing.FontStyle.Bold |
    62                     System.Drawing.FontStyle.Italic));
    63                 System.Drawing.Drawing2D.LinearGradientBrush brush = new System.Drawing.Drawing2D.LinearGradientBrush(
    64                     new Rectangle(0, 0, image.Width, image.Height), Color.Blue, Color.DarkRed, 1.2f, true);
    65                 g.DrawString(checkCode, font, brush, 2, 2);
    66                 //画图片的前景噪音点
    67                 for (int i = 0; i < 100; i++)
    68                 {
    69                     int x = random.Next(image.Width);
    70                     int y = random.Next(image.Height);
    71 
    72                     image.SetPixel(x, y, Color.FromArgb(random.Next()));
    73 
    74 
    75                 }
    76                 //画图片的边框线
    77                 g.DrawRectangle(new Pen(Color.Silver), 0, 0, image.Width - 1, image.Height - 1);
    78 
    79                 System.IO.MemoryStream ms = new System.IO.MemoryStream();
    80                 image.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);
    81                 context.Response.ClearContent();
    82                 context.Response.ContentType = "image/Gif";
    83                 context.Response.BinaryWrite(ms.ToArray());
    84             }
    85             finally
    86             {
    87                 g.Dispose();
    88                 image.Dispose();
    89             }
    90         }
    91         public bool IsReusable
    92         {
    93             get
    94             {
    95                 return false;
    96             }
    97         }
    98     }
       第二步  验证码校验
     1     /// <summary>
     2       /// 完成验证码的校验
     3       /// </summary>
     4       /// <returns></returns>
     5       public static bool CheckValidateCode()
     6       {
     7           HttpContext context = HttpContext.Current;
     8           bool isSucess = false;
     9           if (context.Session["vCode"] != null)
    10           {
    11               string code = context.Request["txtCode"];//文本框输入的值
    12               string sysCode = context.Session["vCode"].ToString();
    13     //忽略大小写
    14               if (sysCode.Equals(code, StringComparison.InvariantCultureIgnoreCase))
    15               {
    16                   //context.Session["vCode"] = null;
    17                   isSucess = true;
    18               }
    19           }
    20           return isSucess;
    21       }
    
    
    
     
  • 相关阅读:
    问题 L: Robots
    最强阵容
    [学习][Math]康托展开和逆康托展开
    [学习][STL]next_permutation
    [动态规划][数位dp]F(x)
    [动态规划][数位dp]Bomb
    [动态规划][数位dp]不要62
    [动态规划][树形dp]Bichrome Tree
    [思维]Finite Encyclopedia of Integer Sequences
    [二分答案]gpa
  • 原文地址:https://www.cnblogs.com/27floor/p/11227189.html
Copyright © 2011-2022 走看看