`
water84222
  • 浏览: 374271 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

验证码的三种做法[纯数字][纯汉字][字母\数字\汉字混合]C#

阅读更多

网上有很多关于验证码做法的资料,但是真正做得完整的却非常少,所以昨天晚上参考了作者:CSDN 上kwklover 的在ASP.NET下实现数字和字符相混合的验证码 (混合,完整,遗憾的是vb.net,说到这里我想我得感谢stone(QQ9337874),因为我在把VB译成C#的过程中几番出错,最终这段翻译由他完成)!!

随机汉字参考了http://navicy.cnblogs.com/archive/2005/05/08/150756.html这篇文章的,

而最终的纯数字以及GDI+绘图则是从□☆近三十☆(QQ19302038)传给我的一个OA案例里面分离出来的!

所以完整的说,这里面几乎都是别人做好了的,我只是整理出来了!

完整的下载地址是 http://www.cnblogs.com/Files/thcjp/gdi.rar 

下面把代码的重点部分贴出来,如果看源文件有什么不明白可以问偶 QQ110535808

效果如图(我确实懒了点,按纽的名字都没有改,哈哈)
需要说明的是,因为提交对比后,页面是重新刷新了,所以文本框里面看见的和后面图片显示不一样,这个不需要太多说明吧!!

 混合模式刷新出现约界错误 已经被 stone(QQ9337874) 修正!!


下面是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); 
                }
 
分享到:
评论

相关推荐

    三种验证码代码示例(数字,数字字母混合,汉字)

    本示例包括三种类型的验证码:纯数字、数字字母混合以及汉字验证码,这些都是为了提高用户验证的安全性和有效性。 首先,`Default.aspx`可能是首页,它可能包含一个链接或按钮,引导用户进入不同的验证码验证页面。...

    C#.NET验证码(数字,英文字母,汉字,混合)

    一个写法很简单,但是却很实用的c#验证码,vs2005编写。包含(数字,英文字母,汉字,混合)四种验证码格式,结合网上兄弟们的代码 写出来的。有需要的朋友可以参考下,个人感觉还可以。

    C#生成中文汉字验证码源码

    【C#生成中文汉字验证码源码详解】 验证码是一种常见的安全机制,用于防止自动化程序...开发者可以根据自己的需求,比如增加字母、数字的混合,或者调整字体、颜色、背景等视觉效果,以提高验证码的安全性和用户体验。

    验证码的三种做法验证码的三种做法验证码的三种做法

    以下是验证码的三种常见做法: 1. **纯数字验证码**: 纯数字验证码是最基础的类型,它只包含0到9的数字。这种验证码相对简单,易于用户识别,但安全性较低,因为自动识别技术对数字的识别成功率较高。为了提高...

    验证码生成类(支持汉字、数字+字母)

    总结来说,这个验证码生成类提供了一种高效且安全的方法来创建汉字和字母数字混合的验证码,适用于多种网络安全需求。通过合理的随机性、图片生成策略以及完善的源码注释,使得它成为一个实用的工具,能够在项目中...

    字母\数字\汉字混合的验证码源码

    标题 "字母\数字\汉字混合的验证码源码" 指的是一个用于生成包含字母、数字和汉字混合的验证码的程序代码。验证码是网络安全中常用的一种技术,它用于防止自动化的机器人或恶意软件进行非法操作,如批量注册、垃圾...

    C# 生成随即验证码图片类库

    2. **字符组合**:根据需求,可以选择不同类型的验证码,如纯数字、纯字母、纯汉字或混合型。在生成验证码时,需要根据设定的类型和长度来组合这些字符。 3. **图片创建与绘制**:生成验证码还需要创建一个图像对象...

    C#自动生成随即验证码

    在本话题中,我们将探讨如何使用C#编程语言自动生成混合了字母(A~Z)和数字(0~9)的随机验证码。这个过程涉及到字符串操作、随机数生成以及图形处理,这些都是C#开发中的基础技能。 首先,我们需要导入必要的命名...

    汉字l图片验证码(c#)

    例如,可以实现多语言支持,增加字母和数字的混合,或者采用更复杂的扭曲算法来提高验证码的安全性。同时,为了提高用户体验,应确保验证码的可读性,避免过于复杂的干扰元素导致用户难以识别。 总的来说,C#结合...

    C# ASP.NET 模块 - 图文验证码模块

    ☆ 功能如下:☆ 纯数字验证码; 字母与数字混合验证码; 纯汉字验证码;

    .NET三种类型验证码实现

    本文将深入探讨.NET中三种类型的验证码实现:数字验证码、字母验证码以及混合型(数字+字母+中文)验证码的创建方法。 1. **数字验证码** 数字验证码是最基础的类型,通常由4到6位随机生成的数字组成。在.NET中,...

    仿Google混合扭曲验证码源码 ZHUImitationGoogleCode.rar

    仿Google混合扭曲验证码源码 源码描述: 一、源码特点 一款仿Google绘制成数字、字母和中文扭曲的验证码程序,感兴趣的欢迎下载 二、、注意事项 1、开发环境为Visual Studio 2010,使用.net 4.0开发。

    基于ASP.net的网站汉字验证码系统源码.zip

    在网页应用中,汉字验证码相对于数字和字母的组合,能提供更高的安全性,因为它们更难被自动化工具识别。 【描述】: "基于ASP.NET的网站汉字验证码系统源码.zip" 描述中提到的是该资源是一个压缩包,包含有基于ASP...

    Asp.net简单实现一个复杂的验证码

    - 验证码是一种人机交互验证,通过生成一组随机字符(通常为数字和字母),并以扭曲、遮挡等方式显示,让用户输入看到的字符,系统再验证用户输入是否正确来判断是否为真实人类操作。 2. **Asp.net环境搭建**: -...

    ASP.NET开发实战1200例(第Ⅰ卷)第二十章

    实例514 绘制纯数字的网站验证码 771 实例515 绘制数字与字母组合的验证码 772 实例516 绘制中文彩色验证码 774 实例517 仿Google绘制数字、字母和中文扭曲 验证码 776 实例518 在随机选中的图片上绘制混合验证码 ...

    C#基类库(苏飞版)

    取汉字拼音的首字母,只要你输入一个汉字,或者是多个汉字就会取出相应的道字母,主要是方便查询使用的 复制代码 16.配置文件操作类 ConfigHelper 1.根据Key取Value值 2.根据Key修改Value 3.添加新的Key ,Value...

    vcg(验证码控件)

    提供灵活的中文诗词、中文单字、英文大小写字母、阿拉伯数字等丰富的验证码生成字源混合控制以及对于字数和字体的自定义控制,让程序员在面对不同客户以及网页访问者的特殊要求的同时仍能从容兼顾良好的用户体验;...

    ASP.NET开发典型模块大全(C#)23到26章源码

     29.2.3 字母与数字混合验证码 640  29.2.4 纯汉字验证码 642  29.3 防盗链技术 644  29.3.1 盗链对网站的危害 644  29.3.2 防盗链的解决措施 645  29.3.3 图片资源防盗链下载 645  29.4 ...

Global site tag (gtag.js) - Google Analytics