多语言展示
当前在线:1432今日阅读:84今日分享:32

计算机专业毕业设计:[21]验证码的制作

计算机专业的很多同学临近毕业了,才着急怎么做一个毕业设计来进行答辩。很短的时间是不可能完成的,天使预计用三个月的时间和计算机专业的同学分享一下怎么完成毕业之前的一项重要任务“毕业设计”。请小伙伴们跟上天使的步伐,在天使的带领下,一起完成你们的毕业设计吧。后期,天使还会讲解如何写毕业论文等,希望小伙伴们持续关注哦。
工具/原料

Visual Studio 2008

方法/步骤
1

在网页左侧有一个用户登录的界面,为防止恶意攻击,我们需要用户在登录的时候输入验证码,本节我们就讲述一下如何制作验证码图片

2

代码【】我们用图片标签,链接一个验证码页面

3

在【new】文件夹上单击右键,选择【新建项】

4

选择【Web窗体】命名为【image.aspx】点击【添加】

5

Web 窗体设计器生成的代码        override protected void OnInit(EventArgs e)        {            //            // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。            //            InitializeComponent();            base.OnInit(e);        }        ///

        /// 设计器支持所需的方法 - 不要使用代码编辑器修改        /// 此方法的内容。        ///         private void InitializeComponent()        {            this.Load += new System.EventHandler(this.Page_Load);        }

6

生成数字和字母的代码【        private string CreateAuthStr(int len)        {            int number;            StringBuilder code = new StringBuilder();            string checkCode = String.Empty;            Random random = new Random();            for (int i = 0; i < len; i++)            {                number = random.Next();                if (number % 2 == 0)                {                    code.Append((char)('0' + (char)(number % 10)));                }                else                {                    code.Append((char)('A' + (char)(number % 26)));                }            }            checkCode = code.ToString();            Response.Cookies.Add(new HttpCookie('CheckCode', checkCode));            return checkCode.ToString();        }】

7

为了防止被其他软件识别出验证码,我们需要增加图片的背景噪音线和前景噪音点

8

因为代码比较多,也特别复杂,天使直接附上代码,同学们直接用我的就行了using System;using System.Data;using System.Configuration;using System.Collections;using System.Web;using System.Web.Security;using System.Web.UI;using System.Web.UI.WebControls;using System.Web.UI.WebControls.WebParts;using System.Web.UI.HtmlControls;using System.IO;using System.Drawing;using System.Drawing.Imaging;using System.Text;using System.Text.RegularExpressions;public partial class _Default : System.Web.UI.Page {    protected void Page_Load(object sender, EventArgs e)    {        //this.CreateCheckCodeImage(CreateAuthStr(5));        this.CreateCheckCodeImage(CreateAuthStr(5, true));    }    #region Web 窗体设计器生成的代码        override protected void OnInit(EventArgs e)        {            //            // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。            //            InitializeComponent();            base.OnInit(e);        }        ///

        /// 设计器支持所需的方法 - 不要使用代码编辑器修改        /// 此方法的内容。        ///         private void InitializeComponent()        {            this.Load += new System.EventHandler(this.Page_Load);        }        #endregion                private string CreateAuthStr(int len)        {            int number;            StringBuilder code = new StringBuilder();            string checkCode = String.Empty;            Random random = new Random();            for (int i = 0; i < len; i++)            {                number = random.Next();                if (number % 2 == 0)                {                    code.Append((char)('0' + (char)(number % 10)));                }                else                {                    code.Append((char)('A' + (char)(number % 26)));                }            }            checkCode = code.ToString();            Response.Cookies.Add(new HttpCookie('CheckCode', checkCode));            return checkCode.ToString();        }        private string CreateAuthStr(int len, bool OnlyNum)        {            if (!OnlyNum)            {                return CreateAuthStr(len);            }            int number;            string checkCode = String.Empty;            StringBuilder code = new StringBuilder();            Random random = new Random();            for (int i = 0; i < len; i++)            {                number = random.Next();                code.Append((char)('0' + (char)(number % 10)));            }            checkCode = code.ToString();            Response.Cookies.Add(new HttpCookie('CheckCode', checkCode));            return checkCode.ToString();        }        private void CreateCheckCodeImage(string checkCode)        {            if (checkCode == null || checkCode.Trim() == String.Empty)                return;            Bitmap image = new Bitmap((int)Math.Ceiling((checkCode.Length * 12.5)), 22);            Graphics g = Graphics.FromImage(image);            try            {                //生成随机生成器                Random random = new Random();                //清空图片背景色                g.Clear(Color.White);                //画图片的背景噪音线                for (int i = 0; i < 25; i++)                {                    int x1 = random.Next(image.Width);                    int x2 = random.Next(image.Width);                    int y1 = random.Next(image.Height);                    int y2 = random.Next(image.Height);                    g.DrawLine(new Pen(Color.Silver), x1, y1, x2, y2);                }                Font font = new System.Drawing.Font('Arial', 12, (System.Drawing.FontStyle.Bold | System.Drawing.FontStyle.Italic));                System.Drawing.Drawing2D.LinearGradientBrush brush = new System.Drawing.Drawing2D.LinearGradientBrush(new Rectangle(0, 0, image.Width, image.Height), Color.Blue, Color.DarkRed, 1.2f, true);                g.DrawString(checkCode, font, brush, 2, 2);                //画图片的前景噪音点                for (int i = 0; i < 100; i++)                {                    int x = random.Next(image.Width);                    int y = random.Next(image.Height);                    image.SetPixel(x, y, Color.FromArgb(random.Next()));                }                //画图片的边框线                g.DrawRectangle(new Pen(Color.Silver), 0, 0, image.Width - 1, image.Height - 1);                System.IO.MemoryStream ms = new System.IO.MemoryStream();                image.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);                Response.ClearContent();                Response.ContentType = 'image/Gif';                Response.BinaryWrite(ms.ToArray());            }            finally            {                g.Dispose();                image.Dispose();            }        }    }

9

验证码已经生成,刷新一次自动生成一次

注意事项

不落泪的天使1原创整理,请尊重小编的辛苦耕耘

推荐信息