验证码源代码

简介: 下面是GDI+绘图的代码段,以及显示的调用等 <div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc
下面是GDI+绘图的代码段,以及显示的调用等
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.Drawing2D;
using  System.Drawing.Imaging;
using  System.Drawing.Text;
using  System.Drawing;
using  System.Text; 

public  partial  class  png : System.Web.UI.Page
{
    
private readonly string ImagePath = "Validator.jpg";
    
private static string gif = "";

    
protected void Page_Load(object sender, EventArgs e)
    
{

        
switch (Request.QueryString["aa"])
        
{
            
case "1":
                gif 
= stxt();
                Session[
"gif"]= stxt();
                
break;
            
case "2":
                gif 
= GetRandomint();
                 Session[
"gif"]= GetRandomint();
                
break;
            
case "3":
                gif 
= RndNum(3);
                 Session[
"gif"]= RndNum(3);
                
break;
            
default:
                gif 
= RndNum(3);
                 Session[
"gif"]= GetRandomint();
                
break;
        }

        
        
/**////创建Bmp位图
        Bitmap bitMapImage = new System.Drawing.Bitmap(Server.MapPath(ImagePath));
        Graphics graphicImage 
= Graphics.FromImage(bitMapImage);

        
/**////设置画笔的输出模式
        graphicImage.SmoothingMode = SmoothingMode.HighSpeed;
        
/**////添加文本字符串
        graphicImage.DrawString(gif, new Font("Arial"20, FontStyle.Bold), SystemBrushes.WindowText, new Point(00));

        
/**////设置图像输出的格式
        Response.ContentType = "image/jpeg";

        
/**////保存数据流
        bitMapImage.Save(Response.OutputStream, ImageFormat.Jpeg);

        
/**////释放占用的资源
        graphicImage.Dispose();
        bitMapImage.Dispose();
    }

返回纯数字

     private  String GetRandomint()
    
{
        Random random 
= new Random();
        
return (random.Next(100000999999).ToString());
    }


返回文字\数字\字母混合的

public   static  String RndNum( int  VcodeNum)
    
{
        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,W,X,Y,Z,呵,哈,弹,簧,秤,嬉,戏";
        String[] VcArray 
= Vchar.Split(',');
        String VNum 
= "";
        Random random 
= new Random();
        
for (int i = 1; i <= VcodeNum; i++)
        
{
            
int iNum = 0;
            
while ((iNum = Convert.ToInt32(VcArray.Length * random.NextDouble())) ==VcArray.Length )
            
{
                iNum 
= Convert.ToInt32(VcArray.Length * random.NextDouble());
            }

            VNum 
+= VcArray[iNum];
            
// VNum += VcArray[Convert.ToInt32(VcArray.Length*random.NextDouble())];
        }

        
return VNum;
    }
 

返回汉字的
        public   static   object [] CreateRegionCode( int  strlength) 
        

            
//定义一个字符串数组储存汉字编码的组成元素 
            string[] rBase=new String [16]{"0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f"}
             
            Random rnd
=new Random(); 
         
            
//定义一个object数组用来 
            object[] bytes=new object[strlength]; 
 
            
/**//**//**//*每循环一次产生一个含两个元素的十六进制字节数组,并将其放入bject数组中 
             每个汉字有四个区位码组成 
             区位码第1位和区位码第2位作为字节数组第一个元素 
             区位码第3位和区位码第4位作为字节数组第二个元素 
            
*/
 
            
for(int i=0;i<strlength;i++
            

                
//区位码第1位 
                int r1=rnd.Next(11,14); 
                
string str_r1=rBase[r1].Trim(); 
 
                
//区位码第2位 
                rnd=new Random(r1*unchecked((int)DateTime.Now.Ticks)+i);//更换随机数发生器的种子避免产生重复值 
                int r2; 
                
if (r1==13
                

                    r2
=rnd.Next(0,7); 
                }
 
                
else 
                

                    r2
=rnd.Next(0,16); 
                }
 
                
string str_r2=rBase[r2].Trim(); 
 
                
//区位码第3位 
                rnd=new Random(r2*unchecked((int)DateTime.Now.Ticks)+i); 
                
int r3=rnd.Next(10,16); 
                
string str_r3=rBase[r3].Trim(); 
 
                
//区位码第4位 
                rnd=new Random(r3*unchecked((int)DateTime.Now.Ticks)+i); 
                
int r4; 
                
if (r3==10
                

                    r4
=rnd.Next(1,16); 
                }
 
                
else if (r3==15
                

                    r4
=rnd.Next(0,15); 
                }
 
                
else 
                

                    r4
=rnd.Next(0,16); 
                }
 
                
string str_r4=rBase[r4].Trim(); 
 
                
//定义两个字节变量存储产生的随机汉字区位码 
                byte byte1=Convert.ToByte(str_r1 + str_r2,16); 
                
byte byte2=Convert.ToByte(str_r3 + str_r4,16); 
                
//将两个字节变量存储在字节数组中 
                byte[] str_r=new byte[]{byte1,byte2}
 
                
//将产生的一个汉字的字节数组放入object数组中 
                bytes.SetValue(str_r,i); 
                 
            }
 
 
            
return bytes; 
 
            }

    
private   string  stxt()
    
{
        Encoding gb 
= Encoding.GetEncoding("gb2312");

        
//调用函数产生4个随机中文汉字编码 
        object[] bytes = CreateRegionCode(3);

        
//根据汉字编码的字节数组解码出中文汉字 
        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 txt = str1 + str2 + str3;
        
return txt;
    }

我们调用页的代码如下

HTML代码
<% @ Page Language="C#" AutoEventWireup="true" CodeFile="view.aspx.cs" Inherits="view"  %>

<! DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" >

< html  xmlns ="http://www.w3.org/1999/xhtml"   >
< head  runat ="server" >
    
< title > 无标题页 </ title >
</ head >
< body >
    
< form  id ="form1"  runat ="server" >
    
< div >
        
&nbsp; < asp:TextBox  ID ="TextBox1"  runat ="server" ></ asp:TextBox >
        
< asp:Image  ID ="Image1"  runat ="server"  ImageUrl ="png.aspx"   />< br  />
        
< br  />
        
&nbsp; < asp:Button  ID ="Button2"  runat ="server"  OnClick ="Button2_Click"  Text ="Button"   />
        
< asp:DropDownList  ID ="DropDownList1"  runat ="server"  AutoPostBack ="True"  OnSelectedIndexChanged ="DropDownList1_SelectedIndexChanged" >
            
< asp:ListItem  Value ="3" > 默认 </ asp:ListItem >
            
< asp:ListItem  Value ="1" > 文字 </ asp:ListItem >
            
< asp:ListItem  Value ="2" > 数字 </ asp:ListItem >
            
< asp:ListItem  Value ="3" > 混合 </ asp:ListItem >
        
</ asp:DropDownList ></ div >
    
</ form >
</ body >
</ html >

CS代码
     protected   void  DropDownList1_SelectedIndexChanged( object  sender, EventArgs e)
    
{
        
switch (DropDownList1.SelectedValue)
        
{
            
case "1":
                Image1.ImageUrl 
= "png.aspx?aa=1";
                
break;
            
case "2":
                Image1.ImageUrl 
= "png.aspx?aa=2";
                
break;
            
case "3":
                Image1.ImageUrl 
= "png.aspx?aa=3";
                
break;
        }

    }

    
protected   void  Button2_Click( object  sender, EventArgs e)
    
{
        
if (TextBox1.Text == Session["gif"].ToString())
            Response.Write(
"OK,正确");
        
else
            Response.Write(
"验证码不符合");
    }
 
目录
相关文章
|
27天前
|
Java
java实现动态验证码源代码——绘制验证码的jsp
java实现动态验证码源代码——绘制验证码的jsp
13 0
|
安全 前端开发 定位技术
推荐一个非常好的行为验证码项目!
KgCaptcha 结合了设备指纹、行为特征、访问频率、地理位置等多项技术,有效的拦截恶意登录、批量注册,阻断机器操作,拦截非正常用户。较传统验证码相比,用户无需再经过思考或输入操作,只需轻轻一滑即可进行验证。
推荐一个非常好的行为验证码项目!
|
搜索推荐 前端开发 API
这个验证码合集,从图形到行为验证,你想要的都有-KgCaptcha
凯格行为验证码 - KgCaptcha,采用业界通用的API接口方式,对接轻松简单,即可享受带来的产品服务能力。自定义样式及风控等级,完全个性化的设置,与你的应用完美融合。
这个验证码合集,从图形到行为验证,你想要的都有-KgCaptcha
|
Java 分布式数据库 图形学
Java的生成图片验证码(有点仿QQ验证码的意思)
Java的生成图片验证码(有点仿QQ验证码的意思)http://www.bieryun.com/806.html 看了挺多图片验证码的代码,感觉没什么长的好看点的,就自己动手写了个,写完发现跟QQ的有几分相似,比较满意。
2436 0
|
机器学习/深度学习 安全 Java
不得不说这个验证码生成库,牛逼了!
不得不说这个验证码生成库,牛逼了!
531 0
不得不说这个验证码生成库,牛逼了!
|
安全 前端开发 数据安全/隐私保护
网页源代码隐藏域中存在密码
网页源代码隐藏域中存在密码
340 0
|
JavaScript PHP
ThinkPHP 3.2.3 验证码 生成和校验DEMO
ThinkPHP 3.2.3 验证码 生成和校验DEMO
130 0
ThinkPHP 3.2.3 验证码 生成和校验DEMO
|
Java BI Maven
学会这个工具的使用,让你快速生成验证码
前言 验证码是我们做人机验证最常用的方式,常用于敏感操作的验证,比如:登录、注册、修改等。 验证码的原理:不同的客户端拥有不同的 session 对象,在看到验证码图片的时刻,服务器后端代码生成图片并将随机字符存储到 session 中。
1177 0
|
PHP
thinkphp生成的验证码不显示问题解决
在调用验证码之前加上 ob_clean();不显示验证码的代码: public function verify(){                 $verify = new \Think\Verify();                 $verify->entry();      ...
1331 0