ASP.NET 验证码

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

例:

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

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

    }

}

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值