注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

我只是一个人

我爱一个人

 
 
 

日志

 
 

.net 验证码  

2011-02-20 22:27:58|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

cs类文件:

using System;
using System.Text;  
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Drawing;
using System.Drawing.Imaging;
using System.Drawing.Drawing2D;
using System.IO;
/// <summary>
///Codeisit 的摘要说明
/// </summary>
public class Codeisit
{
    private const double LENGTHBASE = 12.5;   //定义每个字符所占的宽度
    private const int HEIGHT = 22;   //验证码所站的高度
    private const int LINENUMBER = 50;  //验证码图片上的干扰线数
    private const int POINTNUMBER = 100;  //前景噪点的数量
    private static string VALIDATECODEKEY = "VALIDATECODEKEY";  //创建会话变量所需
    /// <summary>
    /// 验证码的长度
    /// </summary>
    private int lenght = 4;
    /// <summary>
    /// 创建随机验证码
    /// </summary>
    /// <param name="length">验证码的长度</param>
    /// <returns>返回验证码</returns>
    public string CreateCode(int length)
    {
        //if (lenght <= 0) return string.Empty; //表示空字符串,次字符串为只读的
        //Random random = new Random(); //创建一组由数字构成的随机数


        //验证码可以显示的字符集合  
        string Vchar = "0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z";
        string[] VcArray = Vchar.Split(new Char[] { ',' });//拆分成数组  
        string VNum = "";//产生的随机数  
        int temp = -1;//记录上次随机数值,尽量避避免生产几个一样的随机数  

        Random rand = new Random();
        //采用一个简单的算法以保证生成随机数的不同  
        for (int i = 1; i < lenght + 1; i++)
        {
            if (temp != -1)
            {
                rand = new Random(i * temp * unchecked((int)DateTime.Now.Ticks));//初始化随机类  
            }
            int t = rand.Next(36);//获取随机数  
            if (temp != -1 && temp == t)
            {
                return CreateCode(lenght);//如果获取的随机数重复,则递归调用  
            }
            temp = t;//把本次产生的随机数记录起来  
            VNum += VcArray[t];//随机数的位数加一  
        }
       
        return VNum;  
    }
    /// <summary>
    /// 创建基于验证码的图片
    /// </summary>
    /// <param name="code">验证码</param>
    public MemoryStream CreateValidateImage(string code)
    {
        //if (string.IsNullOrEmpty(code) == true) return;//判断验证码是否为空,肯定则返回
        Bitmap bm = new Bitmap((int)Math.Ceiling((code.Length*LENGTHBASE)),HEIGHT);//创建一个bmp图像,图像的宽度和高度于验证码的长度相关
        Graphics g = Graphics.FromImage(bm);
        //Bitmap和Graphics都在Drawing命名空间中使用时需要一引入该空间
        Random rdm = new Random();//创建一个随机生成器
        try
        {
            g.Clear(Color.White);//设置图片的背景
            int x1, x2, y1, y2;//绘制图像的干扰线
            for (int i = 0; i < LINENUMBER; i++)
            {
                x1 = rdm.Next(bm.Width); y1 = rdm.Next(bm.Height);
                x2 = rdm.Next(bm.Width); y2 = rdm.Next(bm.Height);
                g.DrawLine(new Pen(Color.Silver), x1, y1, x2, y2);//绘制干扰线
            }
            //开始绘制验证码
            Font font = new Font("Tahoma", 12, FontStyle.Bold | FontStyle.Italic);
            LinearGradientBrush brush = new LinearGradientBrush(new Rectangle(0, 0, bm.Width, bm.Height), Color.Blue, Color.DarkRed, 1.2f, true);
            g.DrawString(code, font, brush, 2.0f, 2.0f);
            //绘制图像前景噪点
            int x, y;
            for (int i = 0; i < POINTNUMBER; i++)
            {
                x = rdm.Next(bm.Width); y = rdm.Next(bm.Height);
                bm.SetPixel(x, y, Color.FromArgb(rdm.Next()));
            }
            g.DrawRectangle(new Pen(Color.Silver), 0, 0, bm.Width - 1, bm.Height - 1);//绘制边框线
            //保存图像到内存流中
            MemoryStream ms = new MemoryStream();
            bm.Save(ms, ImageFormat.Gif);
            //输出图像
           return ms;
        }
        finally
        {
            //释放资源
            g.Dispose();
            bm.Dispose();
           
        }
       
    }

}

 

aspx.cs文件

 

using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.IO;  

public partial class zzzzz : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        Codeisit code = new Codeisit();
        string codestring = code.CreateCode(4);
        Session["gif"] = codestring;
        MemoryStream ms = new MemoryStream();
        ms = code.CreateValidateImage(codestring);
        Response.ClearContent();
        Response.ContentType = "image/Gif";
        Response.BinaryWrite(ms.ToArray());
    }
}

  评论这张
 
阅读(82)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017