C#.Net2.0 完美随机验证码 0.10版本

原创 2007年10月10日 08:53:00
 花了两晚上的时间,昨天花2小时搞定生成普通的验证码

 

今天晚上花4个小时左右的时间来旋转字体和显示正确上了。

打算下一版加上随机噪点。好了,要睡了!哈哈哈哈~~~


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.Drawing;


namespace  Test
...{
        
/**////  <summary>
        
///  完美随机验证码  0.10  
        
///  Author                          :              zhouyu   http://max.cszi.com
        
///  Verion                          :              0.10
        
///  Update                        :              2007-10-9
        
///  Description            :              随机生成设定验证码,并随机旋转一定角度
        
///  </summary>

        public  partial  class  ValidateCode  :  System.Web.UI.Page
        
...{

                
protected  void  Page_Load(object  sender,  EventArgs  e)
                
...{
                        
string  randomcode  =  this.CreateRandomCode(4);
                        Session[
"ValidateCode"]  =  randomcode;
                        
//ViewState["ValidateCode"]  =  randomcode;
                        this.CreateImage(randomcode);
                }


                
/**////  <summary>
                
///  生成随机码
                
///  </summary>
                
///  <param  name="length">随机码个数</param>
                
///  <returns></returns>

                private  string  CreateRandomCode(int  length)
                
...{
                        
int  rand;
                        
char  code;
                        
string  randomcode  =  String.Empty;

                        
//生成一定长度的验证码
                        System.Random  random  =  new  Random();
                        
for  (int  i  =  0;  i  <  length;  i++)
                        
...{
                                rand  
=  random.Next();

                                
if  (rand  %  3  ==  0)
                                
...{  code  =  (char)('A'  +  (char)(rand  %  26));  }
                                
else
                                
...{  code  =  (char)('0'  +  (char)(rand  %  10));  }

                                randomcode  
+=  code.ToString();
                        }

                        
return  randomcode;
                }



                
/**////  <summary>
                
///  创建随机码图片
                
///  </summary>
                
///  <param  name="randomcode">随机码</param>

                private  void  CreateImage(string  randomcode)
                
...{
                        
int  randAngle  =  45;            //随机转动角度
                        int  mapwidth  =  (int)(randomcode.Length  *  22);
                        Bitmap  map  
=  new  Bitmap(mapwidth,  28);                            //创建图片背景
                        Graphics  graph  =  Graphics.FromImage(map);
                        
//Font  fontstyle  =  new  Font("Arial",  20,  FontStyle.Bold);            //字体样式
                        
//graph.FillRectangle(new  SolidBrush(Color.Black),  0,  0,  map.Width+1,  map.Height+1);          //填充一个有背景的矩形
                        graph.Clear(Color.AliceBlue);              //清除画面,填充背景
                        
//graph.DrawRectangle(new  Pen(Color.Black,  0),  0,  0,  map.Width  -  1,  map.Height  -  1);              //画一个边框
                        
//graph.SmoothingMode  =  System.Drawing.Drawing2D.SmoothingMode.AntiAlias;        //模式
                        

                        Random  rand  
=  new  Random();

                        
//背景噪点生成
                        
//Pen  blackPen  =  new  Pen(Color.Black,  0);
                        
//for  (int  i  =  0;  i  <  2000;  i++)
                        
//{
                        
//        int  x  =  rand.Next(0,  map.Width);
                        
//        int  y  =  rand.Next(0,  map.Height);
                        
//        graph.DrawRectangle(blackPen,  x,  y,    1,  1);

                        
//}

                        
//验证码旋转,防止机器识别
                        char[]  chars  =  randomcode.ToCharArray();            //拆散字符串成单字符数组

                        
//文字距中
                        StringFormat  format  =  new  StringFormat(StringFormatFlags.NoClip);
                        format.Alignment  
=  StringAlignment.Center;
                        format.LineAlignment  
=  StringAlignment.Center;

                        
for  (int  i  =  0;  i  <  chars.Length;  i++)
                        
...{
                                Font  fontstyle  
=  new  Font("Arial",  rand.Next(20,22),  FontStyle.Regular);            //字体样式
                                Point  dot  =  new  Point(16,  16);
                                
//graph.DrawString(dot.X.ToString(),  fontstyle,  new  SolidBrush(Color.Black),  10,  150);                //测试X坐标显示间距的
                                float  angle  =  rand.Next(-randAngle,  randAngle);            //转动的度数

                                graph.TranslateTransform(dot.X,  dot.Y);          
//移动光标到指定位置
                                graph.RotateTransform(angle);                              
                                graph.DrawString(chars[i].ToString(),  fontstyle,  
new  SolidBrush(Color.Blue),    1  ,  1  ,  format  );
                                graph.RotateTransform(
-angle);                    //转回去
                                graph.TranslateTransform(2,  -dot.Y);          //移动光标到指定位置
                        }

                        
//graph.DrawString(randomcode,  fontstyle,  new  SolidBrush(Color.Blue),  2,  2);                    //标准随机码
                        
                        
//生成图片
                        System.IO.MemoryStream  ms  =  new  System.IO.MemoryStream();
                        map.Save(ms,  System.Drawing.Imaging.ImageFormat.Gif);
                        Response.ClearContent();
                        Response.ContentType  
=  "image/gif";
                        Response.BinaryWrite(ms.ToArray());
                        graph.Dispose();
                        map.Dispose();
                }




        }


}


Java_随机生成4位验证码

import java.util.*;//导入java.util包下的类 public class JavaDemo10 { public static void main(String ...
  • a191030148
  • a191030148
  • 2013年03月10日 22:50
  • 20641

ASP.Net随机生成验证码

//首先创建一个页面ValidateCodePage: //创建Random的实例 Random rand=new Random(); protected void Page_Load(obje...
  • bingxueer0702
  • bingxueer0702
  • 2013年01月24日 18:16
  • 1293

C#生成随机验证码例子

C#生成随机验证吗例子:  前端: 1 2 "24%" height="26" align="center" valign="top"> 3 验证...
  • CoderJYF
  • CoderJYF
  • 2017年01月17日 10:25
  • 795

【验证码】PHP生成随机验证码

这是结合别人的代码自己进行改编的网页验证码的使用
  • GO_D_OG
  • GO_D_OG
  • 2017年01月02日 15:21
  • 381

登录随机验证码

1.java类源码package code; import com.sun.image.codec.jpeg.JPEGCodec; import com.sun.image.codec.jpeg.J...
  • u010334221
  • u010334221
  • 2016年04月10日 20:53
  • 220

Storm 0.10.0新特性整理一览

1、安全性和多用户调度部署 和早期的Hadoop相似,Storm被假设会部署到远离安全威胁的环境中,所以一开始并没有太多的考虑安全性问题。虽然大量用户对Storm都制定了他们自己的安全举措(通常...
  • liuxiao723846
  • liuxiao723846
  • 2017年11月23日 17:01
  • 94

【java】图片验证码的随机生成

1.场景还原    最近在项目的前端工程中,有这样的需求:随机生成验证码,点击图片验证码也可以更换验证码,并且传输到后台验证。 效果UI图: 2.实现方案 1.前端界面布置代码...
  • zhangxing52077
  • zhangxing52077
  • 2017年05月15日 16:54
  • 493

C#随机生成验证码方法

using System; using System.Collections.Generic; using System.Drawing; using System.Linq; using S...
  • Denghejing
  • Denghejing
  • 2016年07月10日 15:40
  • 3779

Android生成随机验证码技术

在Android客户端应用开发中,往往需要短信验证码或者随机验证码来限制用户的操作或者认证。短信验证码是为了对用户进行认证,主要通过Http协议等通信协议实现;随机验证码很大程度是为限制或者提示用户相...
  • u012637501
  • u012637501
  • 2015年06月15日 15:52
  • 1450

web登录:随机验证码的设计和实现

本文特点: 针对验证码的生成做了很多算法优化和调整,支持一个典型的验证码生成和验证流程,利用缓存服务器解决聚群部署架构中数据同步的问题。 基本需求: 登录页面显示一个随机验证码图片、有背景干扰...
  • ClementAD
  • ClementAD
  • 2015年09月28日 19:35
  • 11006
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C#.Net2.0 完美随机验证码 0.10版本
举报原因:
原因补充:

(最多只允许输入30个字)