汉字验证码技术:它比字母跟数字混合技术更先进。主要用过生成汉字的区位码将其转换为汉字,区位码是汉字一一对应的编码。用4为数字表示,前面两位从01到94成为区码,同理后面两位成为位码。
CheckCode.aspx.cs: 

  1public partial class _Default : System.Web.UI.Page 
  2
  3protected void Page_Load(object sender, EventArgs e) 
  4
  5GraphicsImage(4); //调用方法生成四位汉字验证码 
  6
  7
  8private object[] CreateString(int strlength) 
  9
 10//定义一个数组存储汉字编码的组成元素 
 11string[] str = new string[16] { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", 
 12"e", "f" }; 
 13
 14Random ran = new Random(); //定义一个随机数对象 
 15object[] bytes = new object[strlength]; 
 16for (int i = 0; i < strlength; i++) 
 17
 18//获取区位码第一位 
 19int ran1 = ran.Next(11, 14); 
 20string str1 = str[ran1].Trim(); 
 21
 22//获取区位码第二位并防止数据重复 
 23ran = new Random(ran1 * unchecked((int)DateTime.Now.Ticks) + i); 
 24int ran2; 
 25if (ran1 == 13) 
 26
 27ran2 = ran.Next(0, 7); 
 28
 29else 
 30
 31ran2 = ran.Next(0, 16); 
 32
 33string str2 = str[ran2].Trim(); 
 34
 35//获取区位码第三位 
 36ran = new Random(ran2 * unchecked((int)DateTime.Now.Ticks) + i); 
 37int ran3 = ran.Next(10, 16); 
 38string str3 = str[ran3].Trim(); 
 39
 40//获取区位码第四位 
 41ran = new Random(ran3 * unchecked((int)DateTime.Now.Ticks) + i); 
 42int ran4; 
 43if (ran3 == 10) 
 44
 45ran4 = ran.Next(1, 16); 
 46
 47else if (ran3 == 15) 
 48
 49ran4 = ran.Next(0, 15); 
 50
 51else 
 52
 53ran4 = ran.Next(0, 16); 
 54
 55string str4 = str[ran4].Trim(); 
 56
 57//定义字节变量存储产生的随机汉字区位码 
 58byte byte1 = Convert.ToByte(str1 + str2, 16); 
 59byte byte2 = Convert.ToByte(str3 + str4, 16); 
 60
 61byte[] stradd = new byte[] { byte1,byte2}; 
 62//将产生的汉字字节放入数组 
 63bytes.SetValue(stradd, i); 
 64
 65return bytes; 
 66
 67
 68private string GetString(int length) 
 69
 70Encoding gb = Encoding.GetEncoding("gb2312"); 
 71object[] bytes = CreateString(length); 
 72
 73//根据汉字字节解码出中文汉字 
 74string str1 = gb.GetString((byte[])Convert.ChangeType(bytes[0], typeof(byte[]))); 
 75string str2 = gb.GetString((byte[])Convert.ChangeType(bytes[1], typeof(byte[]))); 
 76string str3 = gb.GetString((byte[])Convert.ChangeType(bytes[2], typeof(byte[]))); 
 77string str4 = gb.GetString((byte[])Convert.ChangeType(bytes[3], typeof(byte[]))); 
 78
 79string str = str1 + str2 + str3 + str4; 
 80Response.Cookies.Add(new HttpCookie("CheckCode", str)); 
 81return str; 
 82
 83
 84private void GraphicsImage(int length) 
 85
 86System.Drawing.Bitmap image = new System.Drawing.Bitmap((int)Math.Ceiling((GetString(length).Length * 
 8722.5)), 22); 
 88Graphics g = Graphics.FromImage(image); //创建画布 
 89
 90try 
 91
 92//生成随机生成器 
 93Random random = new Random(); 
 94
 95//清空图片背景色 
 96g.Clear(Color.White); 
 97
 98//画图片的背景噪音线 
 99for (int i = 0; i < 1; i++) 
100
101int x1 = random.Next(image.Width); 
102int x2 = random.Next(image.Width); 
103int y1 = random.Next(image.Height); 
104int y2 = random.Next(image.Height); 
105
106g.DrawLine(new Pen(Color.Black), x1, y1, x2, y2); 
107
108
109Font font = new System.Drawing.Font("Couriew New", 12, System.Drawing.FontStyle.Bold ); 
110System.Drawing.Drawing2D.LinearGradientBrush brush = new 
111System.Drawing.Drawing2D.LinearGradientBrush 
112(new Rectangle(0, 0, image.Width, image.Height), Color.Blue, Color.DarkRed, 1.2f, true); 
113g.DrawString(GetString(length), font, brush, 2, 2); 
114
115//画图片的前景噪音点 
116for (int i = 0; i < 50; i++) 
117
118int x = random.Next(image.Width); 
119int y = random.Next(image.Height); 
120
121image.SetPixel(x, y, Color.FromArgb(random.Next())); 
122
123
124//画图片的边框线 
125g.DrawRectangle(new Pen(Color.Silver), 0, 0, image.Width - 1, image.Height - 1); 
126System.IO.MemoryStream ms = new System.IO.MemoryStream(); 
127image.Save(ms, System.Drawing.Imaging.ImageFormat.Gif); 
128Response.ClearContent(); 
129Response.ContentType = "image/Gif"; 
130Response.BinaryWrite(ms.ToArray()); 
131
132catch (Exception ms) 
133
134Response.Write(ms.Message); 
135
136
137}
138

引用文件:

 1    protected void Button1_Click(object sender, EventArgs e)
 2    {
 3        HttpCookie cookie = Request.Cookies["CheckCode"];
 4        if (cookie.Value == this.TextBox3.Text.Trim())
 5        {
 6            Response.Write("<script>alert('验证码正确!')</script>");
 7        }
 8        else
 9        {
10            Response.Write("<script>alert('验证码错误!')</script>");
11        }
12    }

转载于:https://www.cnblogs.com/milk3q/archive/2008/01/10/1034161.html

【转】ASP.NET中文验证码详解相关推荐

  1. java做jsp问题_java/jsp中 中文问题详解

    java/jsp中 中文问题详解 更新时间:2006年10月13日 00:00:00   作者: 预备知识: 1.字节和unicode Java内核是unicode的,就连class文件也是,但是很多 ...

  2. python中可变参数*args传入函数时的存储方式为_python 中文读法详解Python函数可变参数定义及其参数传递方式...

    Python函数可变参数定义及其参数传递方式详解 python中 函数不定参数的定义形式如下 1. func(*args) 传入的参数为以元组形式存在args中,如: def func(*args): ...

  3. elasticsearch-.yml(中文配置详解)

    此elasticsearch-.yml配置文件,是在$ES_HOME/config/下 elasticsearch-.yml(中文配置详解) # ======================== El ...

  4. php推荐码生成,最新最全PHP生成制作验证码代码详解(推荐),验证码详解_PHP教程...

    最新最全PHP生成制作验证码代码详解(推荐),验证码详解 1.0 首先先看代码 好,现在结合以上代码,来分析分析以上用到的几个函数: ① imagecreatetruecolor(); imagecr ...

  5. ASP.NET页面事件详解

    ASP.NET页面事件详解 ASP.NET页面事件详解 1.Page_Init()事件 当页面初始化时发生此事件.可以利用Page_Init()将该事件与要在.NET页面上显示控件之前的运行的代码建立 ...

  6. Asp.Net+Jquery.Ajax详解5-$.getScript

    目录(已经更新的文章会有连接,从7月25日开始,每2到3天更新一篇): Asp.Net+Jquery.Ajax详解1-开篇(2012.07.25发) Asp.Net+Jquery.Ajax详解2-$. ...

  7. ASP.NET 操作Cookie详解 增加,修改,删除

    ASP.NET 操作Cookie详解 增加,修改,删除 Cookie,有时也用其复数形式Cookies,指某些网站为了辨别用户身份而储存在用户本地终端上的数据(通常经过加密).定义于RFC2109.它 ...

  8. ASP.NET 运行时详解 揭开请求过程神秘面纱

    对于ASP.NET开发,排在前五的话题离不开请求生命周期.像什么Cache.身份认证.Role管理.Routing映射,微软到底在请求过程中干了哪些隐秘的事,现在是时候揭晓了.抛开乌云见晴天,接下来就 ...

  9. 史上最详细的Pytorch版yolov3代码中文注释详解(四)

    史上最详细的Pytorch版yolov3代码中文注释详解(一):https://blog.csdn.net/qq_34199326/article/details/84072505 史上最详细的Pyt ...

最新文章

  1. linux samba 空目录,linux Samba搭建
  2. php gdk,gdk.php
  3. 【计算机图形学课程】一.MFC基本绘图函数使用方法
  4. Objective-c:NSString的常用方法
  5. html里面布局的优劣,HTML与CSS布局技巧总结
  6. centos怎么用命令行启动mysql_centos怎么用命令行启动mysql数据库
  7. burpsuite字典破解密码
  8. FLask框架AJAX操作
  9. vs2017+BabeLua+Cocos2dx3.10配置
  10. 当update语句提交后,数据库做了哪些操作?
  11. 交流电过零点检测电路总结
  12. CryptoNight
  13. OS=Windows and the assembly descriptor contains a *nix-specific root-relative-reference (starting wi
  14. LQ0141 纸张尺寸【水题】
  15. 微信小程序wxs将数字转换为汉字
  16. C++笔记8:C++提高编程2:STL---标准模板库
  17. 开源中国源码学习(六)——ButterKnife的使用
  18. Ubuntu 10.10 最全的更新源收集(ubuntu yuan)
  19. opencv图像分割合成_OpenCV图像分割-watershed
  20. [NOIP2017 提高组] 时间复杂度

热门文章

  1. java堆外内存6_Java堆外内存排查小结
  2. oracle11g ora 12545,sqlplus本地登录报错ORA-12545
  3. 判断点是否在凸多边形内
  4. python语言程序的特点_Python语言有哪些优点?
  5. AtCoder AGC029E Wandering TKHS
  6. Linux系统怎么挂载安卓手机,NFS挂载Android文件系统
  7. 一加3t刷机后还卡_OPPO A5?A7?A57?刷机注意:这几款手机千万别混淆!
  8. 性能测试方案_MeterSphere案例分享丨基于JMeter的性能测试方案演进之路
  9. kettle对字符串去除空格_整理|ABAP基础知识二:常用字符串处理
  10. javaweb-服务器输出字符数据到浏览器