zoukankan      html  css  js  c++  java
  • asp.net 加入验证码

    验证码生成页面代码(清理掉没用的html)

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Drawing;
    using System.Threading;
    using System.Drawing.Text;
    using System.Drawing.Drawing2D;
    
    namespace ZhuoYueE.Dop.Web.UI.FenFa
    {
        public partial class CodeImg : System.Web.UI.Page
        {
            protected void Page_Load(object sender, EventArgs e)
            {
                string randomcode = CreateRandomCode(4);
                Session["Code"] = randomcode;
                this.CreateImage(randomcode);
            }
    
            /// 生成随机码
            /// </summary>
            /// <param name="length">随机码个数</param>
            /// <returns></returns>
            private string CreateRandomCode(int length)
            {
                int rand;
                char code;
                string randomcode = String.Empty;
    
                //生成一定长度的验证码
                System.Random random = new Random();
                for (int i = 0; i < length; i++)
                {
                start:
                    rand = random.Next();
    
                    if (rand % 3 == 0)
                    {
                        code = (char)('A' + (char)(rand % 26));
                    }
                    else
                    {
                        code = (char)('0' + (char)(rand % 10));
                    }
                    if (code == '0' || code == 'o' || code == 'O' || code == '1' || code == 'i' || code == 'I' || code == 'l')
                        goto start;
                    randomcode += code.ToString();
                }
                return randomcode;
            }
    
            /// <summary>
            /// 创建随机码图片
            /// </summary>
            /// <param name="randomcode">随机码</param>
            private void CreateImage(string randomcode)
            {
                //定义颜色
                Random rand = new Random();
    
                Color c = Color.FromArgb(rand.Next(155), rand.Next(155), rand.Next(155));
    
                int randAngle = 45; //随机转动角度
                int mapwidth = (int)(randomcode.Length * 16);
                Bitmap map = new Bitmap(mapwidth, 22);//创建图片背景
                Graphics graph = Graphics.FromImage(map);
                graph.Clear(Color.FromArgb(rand.Next(200, 255), rand.Next(200, 255), rand.Next(200, 255)));//清除画面,填充背景
                graph.DrawRectangle(new Pen(Color.Black, 0), 0, 0, map.Width - 1, map.Height - 1);//画一个边框
                //graph.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;//模式
    
    
    
                //背景噪点生成
                //Pen blackPen = new Pen(c[cindex], 0);
                //for (int i = 0; i < 30; i++)
                //{
                //    int x = rand.Next(0, map.Width);
                //    int y = rand.Next(0, map.Height);
                //    graph.DrawRectangle(blackPen, x, y, 1, 1);
                //}
    
    
                //验证码旋转,防止机器识别
                char[] chars = randomcode.ToCharArray();//拆散字符串成单字符数组
    
                //文字距中
                StringFormat format = new StringFormat(StringFormatFlags.NoClip);
                format.Alignment = StringAlignment.Center;
                format.LineAlignment = StringAlignment.Center;
    
    
                //定义字体
                string[] font = { "Verdana", "Microsoft Sans Serif", "Comic Sans MS", "Arial", "宋体", "Microsoft New Tai Lue" };
    
    
    
                int Count = font.Length;
    
                LinearGradientBrush b = new LinearGradientBrush(
                      new Point(0, 0), new Point(250, 250),
                      Color.FromArgb(rand.Next(155), rand.Next(155), rand.Next(155)),
                      Color.FromArgb(rand.Next(155), rand.Next(155), rand.Next(155)));
    
                for (int i = 0; i < chars.Length; i++)
                {
                    int findex = rand.Next(Count);
    
                    //渐变色:起点(0, 0)从红色 --->终点(250, 250)蓝色
    
                    Font f = new System.Drawing.Font(font[findex], 14, System.Drawing.FontStyle.Bold);//字体样式(参数2为字体大小)
    
    
    
                    // Brush b = new System.Drawing.SolidBrush(c);
    
                    Point dot = new Point(14, 14);
                    //graph.DrawString(dot.X.ToString(),fontstyle,new SolidBrush(Color.Black),10,150);//测试X坐标显示间距的
                    float angle = rand.Next(-randAngle, randAngle);//转动的度数
    
                    graph.TranslateTransform(dot.X, dot.Y);//移动光标到指定位置
                    graph.RotateTransform(angle);
                    graph.DrawString(chars[i].ToString(), f, b, 1, 1, format);
                    //graph.DrawString(chars[i].ToString(),fontstyle,new SolidBrush(Color.Blue),1,1,format);
                    graph.RotateTransform(-angle);//转回去
                    graph.TranslateTransform(-2, -dot.Y);//移动光标到指定位置,每个字符紧凑显示,避免被软件识别
                }
    
                //画干扰线
                Graphics graph1 = Graphics.FromImage(map);
                int intw = map.Width / 4;
                int inth = map.Height / 4;
                for (int i = 0; i < 3; i++)
                {
                    int x1, x2, y1, y2;
                    x1 = rand.Next(0, intw);
                    y1 = rand.Next(inth, map.Height - inth);
                    Thread.Sleep(5);
                    x2 = rand.Next(map.Width - intw, map.Width);
                    Thread.Sleep(5);
                    y2 = rand.Next(inth, map.Height - inth);
                    graph1.DrawLine(new Pen(b, 1f), x1, y1, x2, y2);
                }
    
                for (int i = 0; i < map.Width; i++)
                {
                    for (int j = 0; j < map.Height; j++)
                    {
                        Color cc = map.GetPixel(i, j);
                        map.SetPixel(i, j, GetColorByColor(cc));
                    }
                }
    
                //生成图片
                System.IO.MemoryStream ms = new System.IO.MemoryStream();
                map.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);
                Response.ClearContent();
                Response.ContentType = "image/gif";
                Response.BinaryWrite(ms.ToArray());
                graph.Dispose();
                graph1.Dispose();
                map.Dispose();
            }
    
            private Color GetColorByColor(Color c)
            {
                int[] cs = new int[] { c.R, c.G, c.B };
                Random r = new Random();
                for (int i = 0; i < cs.Length; i++)
                {
                    if (cs[i] < 50 || cs[i] > 205)
                        continue;
                    int rn = r.Next(-50, 50);
                    cs[i] += rn;
                }
                return Color.FromArgb(cs[0], cs[1], cs[2]);
            }
        }
    }
    View Code

    调用代码

    <img style="height: 30px" src="codeimg.aspx" id="imgcode" onclick="GetCode()" />
    
    
     function GetCode() {
                document.getElementById("imgcode").src = "codeimg.aspx?t=" + new Date().getTime();
            }
    

      效果如下:

  • 相关阅读:
    pycharm在401跑程序需要每个py文件加一句
    youtube下载视频方法
    服务器重启登陆界面死循环
    matlab2012b_win_install
    ubuntu_matlab2012b_install
    cuda8.0 + cudnn6 + tensorflow1.4 xing
    [BAT] cmd 管理员权限 右键菜单 运行
    Windows下遍历所有GIT目录更新项目脚本
    获取Xshell Xftp等官网下载地址
    Win10 企业版 激活 批处理
  • 原文地址:https://www.cnblogs.com/bfyx/p/6047767.html
Copyright © 2011-2022 走看看