牵着老婆满街逛

严以律己,宽以待人. 三思而后行.
GMail/GTalk: yanglinbo#google.com;
MSN/Email: tx7do#yahoo.com.cn;
QQ: 3 0 3 3 9 6 9 2 0 .

asp.net(c#)中文验证码程序

来源:http://www.sosuo8.com/article/show.asp?id=816

天在同学的书上看到的,跟大家分享下,

效果:

先建一个checkcode.aspx.

进入checkcode.aspx.cs

using System;
using System.Data;
using System.Configuration;
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.Text;  //添加引用
using System.Drawing;  //添加引用

public partial class _Default : System.Web.UI.Page 
{
    
protected void Page_Load(object sender, EventArgs e)
    
{
        GraphicsImage(
4);  //调用方法生成四位汉字验证码
    }


    
private object[] CreateString(int strlength)
    
{
        
//定义一个数组存储汉字编码的组成元素
        string[] str = new string[16"0""1""2""3""4""5""6""7""8""9""a""b""c""d""e""f" };

        Random ran 
= new Random();  //定义一个随机数对象
        object[] bytes = new object[strlength];
        
for (int i = 0; i < strlength; i++)
        
{
            
//获取区位码第一位
            int ran1 = ran.Next(1114);
            
string str1 = str[ran1].Trim();

            
//获取区位码第二位并防止数据重复
            ran = new Random(ran1 * unchecked((int)DateTime.Now.Ticks) + i);
            
int ran2;
            
if (ran1 == 13)
            
{
                ran2 
= ran.Next(07);
            }

            
else
            
{
                ran2 
= ran.Next(016);
            }

            
string str2 = str[ran2].Trim();

            
//获取区位码第三位
            ran = new Random(ran2 * unchecked((int)DateTime.Now.Ticks) + i);
            
int ran3 = ran.Next(1016);
            
string str3 = str[ran3].Trim();

            
//获取区位码第四位
            ran = new Random(ran3 * unchecked((int)DateTime.Now.Ticks) + i);
            
int ran4;
            
if (ran3 == 10)
            
{
                ran4 
= ran.Next(116);
            }

            
else if (ran3 == 15)
            
{
                ran4 
= ran.Next(015);
            }

            
else
            
{
                ran4 
= ran.Next(016);
            }

            
string str4 = str[ran4].Trim();

            
//定义字节变量存储产生的随机汉字区位码
            byte byte1 = Convert.ToByte(str1 + str2, 16);
            
byte byte2 = Convert.ToByte(str3 + str4, 16);

            
byte[] stradd = new byte[] { byte1,byte2};
            
//将产生的汉字字节放入数组
            bytes.SetValue(stradd, i);
        }

        
return bytes;
    }


    
private string GetString(int length)
    
{
        Encoding gb 
= Encoding.GetEncoding("gb2312");
        
object[] bytes = CreateString(length);

        
//根据汉字字节解码出中文汉字
        string str1 = gb.GetString((byte[])Convert.ChangeType(bytes[0], typeof(byte[])));
        
string str2 = gb.GetString((byte[])Convert.ChangeType(bytes[1], typeof(byte[])));
        
string str3 = gb.GetString((byte[])Convert.ChangeType(bytes[2], typeof(byte[])));
        
string str4 = gb.GetString((byte[])Convert.ChangeType(bytes[3], typeof(byte[])));

        
string str = str1 + str2 + str3 + str4;
        Response.Cookies.Add(
new HttpCookie("CheckCode", str));
        
return str;
    }


    
private void GraphicsImage(int length)
    
{
        System.Drawing.Bitmap image 
= new System.Drawing.Bitmap((int)Math.Ceiling((GetString(length).Length * 22.5)), 22);
        Graphics g 
= Graphics.FromImage(image);  //创建画布

        
try
        
{
            
//生成随机生成器
            Random random = new Random();

            
//清空图片背景色
            g.Clear(Color.White);

            
//画图片的背景噪音线
            for (int i = 0; i < 1; 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.Black), x1, y1, x2, y2);
            }


            Font font 
= new System.Drawing.Font("Couriew New"12, System.Drawing.FontStyle.Bold );
            System.Drawing.Drawing2D.LinearGradientBrush brush 
= new System.Drawing.Drawing2D.LinearGradientBrush
                (
new Rectangle(00, image.Width, image.Height), Color.Blue, Color.DarkRed, 1.2ftrue);
            g.DrawString(GetString(length), font, brush, 
22);

            
//画图片的前景噪音点
            for (int i = 0; i < 50; 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), 00, 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());
        }

        
catch (Exception ms)
        
{
            Response.Write(ms.Message);
        }


    }

}


 

有耐心的就看完,没耐心的就直接复制吧!

注意里面的一句:
Response.Cookies.Add(new HttpCookie("CheckCode", str));

是用Cookies保存的不是用Session大家注意点.

新建一个defaulta.aspx,

代码主要是

<asp:TextBox ID="TextBox3" runat="server" Font-Size="9pt" Width="65px"></asp:TextBox>
<asp:Image ID="Image1" src="CheckCode.aspx" runat="server" Height="21px" Width="85px" />
<asp:Button ID="Button1" runat="server" Font-Size="9pt" Text="确定" OnClick="Button1_Click" />


注意上面只是贴出主要代码,只是一个文本框,一个验证码图片,一个确定按钮.

进入default.aspx.cs

 

protected void Button1_Click(object sender, EventArgs e)
    
{
        HttpCookie cookie 
= Request.Cookies["CheckCode"];
        
if (cookie.Value == this.TextBox3.Text.Trim())
        
{
            Response.Write(
"<script>alert(‘验证码正确!‘)</script>");
        }

        
else
        
{
            Response.Write(
"<script>alert(‘验证码错误!‘)</script>");
        }

    }


自己看看!!!

源码下载:CnCheckCode.rar

posted on 2007-08-31 11:34 杨粼波 阅读(624) 评论(0)  编辑 收藏 引用


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理