ASP.NET 验证码

    技术2022-05-11  60

            近日,为公司做网站,需要使用到验证码。于是到网络上搜索了一下,并没有发现特别满意的源代码,上的还可以,但蝈蝈不给呀() 。没有办法,只有自己动手了。

    例:

    下面是源程序,一般都有注释。没有必要再说了吧。

    using  System; using  System.Data; using  System.Configuration; using  System.Collections; using  System.ComponentModel; 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.Web.SessionState; using  System.Drawing; using  System.Drawing.Imaging; public   partial   class  ValidateCode : System.Web.UI.Page {    /// <summary>    /// 验证码长度    /// </summary>    private int codeLen = 6;    /// <summary>    /// 图片宽度    /// </summary>    private int imgWidth = 200;    /// <summary>    /// 图片高度    /// </summary>    private int imgHeight = 35;    /// <summary>    /// 字体大小    /// </summary>    private int fontSize = 18;    /// <summary>    /// 干扰度(百分之几)    /// </summary>    private int fineness = 1;    protected void Page_Load(object sender, EventArgs e)    {        Response.Expires = 0;        string validateCode = CreateValidateCode();        Bitmap bitmap = new Bitmap(imgWidth, imgHeight);        //给图像设置干扰        DisturbBitmap(bitmap);        //绘制验证码图像        DrawValidateCode(bitmap, validateCode);        //保存验证码图像,等待输出        bitmap.Save(Response.OutputStream, ImageFormat.Jpeg);    }    /// <summary>    /// 随机生成验证码,并保存到SESSION中    /// </summary>    /// <returns></returns>    private string CreateValidateCode()    {        string validateCode = "";        Random random = new Random();        string tmp = "ABCDEFGHJKLMNPQRSTUVWXYZ23456789";        for (int i = 0; i < codeLen; i++)        {            int n = random.Next(tmp.Length);            validateCode += tmp[n];        }        Session["ValidateCode"= validateCode;        return validateCode;    }    /// <summary>    /// 为图片设置干扰点    /// </summary>    /// <param name="bitmap"></param>    private void DisturbBitmap(Bitmap bitmap)    {        Random rand = new Random();        int iRed = rand.Next(200255);        int iGreen = rand.Next(200255);        int iBlue = rand.Next(200255);        int iAlpha = rand.Next(0100);        // 通过随机数生成        Random random = new Random();        for (int i = 0; i < bitmap.Width; i++)        {            for (int j = 0; j < bitmap.Height; j++)            {                if (random.Next(100<= this.fineness)                {                    //设置干扰点                    iAlpha = rand.Next(0100);                    iRed = rand.Next(50150);                    iGreen = rand.Next(50150);                    iBlue = rand.Next(50150);                    bitmap.SetPixel(i, j, Color.FromArgb(iAlpha, iRed, iGreen, iBlue));                }                else                {                    //绘制背景色                    iAlpha = rand.Next(0100);                    iRed = rand.Next(240255);                    iGreen = rand.Next(200255);                    iBlue = rand.Next(200255);                    bitmap.SetPixel(i, j, Color.FromArgb(iAlpha, iRed, iGreen, iBlue));                }            }        }        //画边框        iAlpha = rand.Next(0100);        iRed = rand.Next(00);        iGreen = rand.Next(0255);        iBlue = rand.Next(0255);        for (int i = 0; i < bitmap.Width; i++)        {            bitmap.SetPixel(i, 0, Color.FromArgb(iAlpha, iRed, iGreen, iBlue));            bitmap.SetPixel(i, 1, Color.FromArgb(iAlpha, iRed, iGreen, iBlue));            bitmap.SetPixel(i, bitmap.Height - 1, Color.FromArgb(iAlpha, iRed, iGreen, iBlue));            bitmap.SetPixel(i, bitmap.Height - 2, Color.FromArgb(iAlpha, iRed, iGreen, iBlue));        }        for (int i = 0; i < bitmap.Height; i++)        {            bitmap.SetPixel(0, i, Color.FromArgb(iAlpha, iRed, iGreen, iBlue));            bitmap.SetPixel(1, i, Color.FromArgb(iAlpha, iRed, iGreen, iBlue));            bitmap.SetPixel(bitmap.Width - 1, i, Color.FromArgb(iAlpha, iRed, iGreen, iBlue));            bitmap.SetPixel(bitmap.Width - 2, i, Color.FromArgb(iAlpha, iRed, iGreen, iBlue));        }    }    /// <summary>    /// 绘制验证码图片    /// </summary>    /// <param name="bitmap"></param>    /// <param name="validateCode"></param>    private void DrawValidateCode(Bitmap bitmap, string validateCode)    {        //随机获取颜色        Random rand = new Random();        int iRed = rand.Next(050);        int iGreen = rand.Next(050);        int iBlue = rand.Next(050);        int iAlpha = rand.Next(50100);        char[] chr = validateCode.ToCharArray();        for (int i = 0; i < codeLen; i++)        {            Font f = new Font(new FontFamily("Microsoft Sans Serif"), fontSize, FontStyle.Bold | FontStyle.Italic);            Brush b = new SolidBrush(Color.FromArgb(iAlpha, iRed, iGreen, iBlue));            Graphics g = Graphics.FromImage(bitmap);            //设置各字符的漂浮范围            int iX, iY;            iX = rand.Next(-55);            iY = rand.Next(-55);            //绘制验证码图像            g.DrawString(chr[i].ToString(), f, b,                (float)((bitmap.Width / codeLen) * (i) + iX),                (float)(bitmap.Height / 2 - g.MeasureString(chr[i].ToString(), f).Height / 2 + iY));        }    }}

    最新回复(0)