场景

中文验证码效果

注:

博客主页:
https://blog.csdn.net/badao_liumang_qizhi
关注公众号
霸道的程序猿
获取编程相关电子书、教程推送与免费下载。

实现

新建一个窗体页面,设计布局如下

其中显示验证码的是PictureBox

然后进入窗体代码中修改为

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Drawing.Imaging;
using System.Drawing.Drawing2D;
namespace ChineseCode
{public partial class Form1 : Form{public Form1(){InitializeComponent();}public string txt = "";private void Form1_Load(object sender, EventArgs e){CreateImage();}private void CreateImage(){//获取GB2312编码页(表)Encoding gb = Encoding.GetEncoding("gb2312");//调用函数产生4个随机中文汉字编码object[] bytes = CreateCode(4);//根据汉字编码的字节数组解码出中文汉字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[])));txt = str1 + str2 + str3 + str4;if (txt == null || txt == String.Empty){return;}Bitmap image = new Bitmap((int)Math.Ceiling((txt.Length * 20.5)), 22);Graphics g = Graphics.FromImage(image);try{//生成随机生成器Random random = new Random();//清空图片背景色g.Clear(Color.White);//画图片的背景噪音线for (int i = 0; i < 2; i++){Point tem_Point_1 = new Point(random.Next(image.Width), random.Next(image.Height));Point tem_Point_2 = new Point(random.Next(image.Width), random.Next(image.Height));g.DrawLine(new Pen(Color.Black), tem_Point_1, tem_Point_2);}Font font = new Font("宋体", 12, (FontStyle.Bold));LinearGradientBrush brush = new LinearGradientBrush(new Rectangle(0, 0, image.Width, image.Height), Color.Blue, Color.DarkRed, 1.2f, true);g.DrawString(txt, font, brush, 2, 2);//画图片的前景噪音点for (int i = 0; i < 100; i++){Point tem_point = new Point(random.Next(image.Width),random.Next(image.Height));image.SetPixel(tem_point.X,tem_point.Y, Color.FromArgb(random.Next()));}//画图片的边框线g.DrawRectangle(new Pen(Color.Silver), 0, 0, image.Width - 1, image.Height - 1);pictureBox1.Image = image;}catch { }}/**//*此函数在汉字编码范围内随机创建含两个元素的十六进制字节数组,每个字节数组代表一个汉字,并将四个字节数组存储在object数组中。参数:strlength,代表需要产生的汉字个数*/public static object[] CreateCode(int strlength){//定义一个字符串数组储存汉字编码的组成元素string[] r=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 = r[r1].Trim();//区位码第2位rnd=new Random(r1*unchecked((int)DateTime.Now.Ticks)+i);//更换随机数发生器的种子避免产生重复值int r2;if (r1==13)r2=rnd.Next(0,7);elser2=rnd.Next(0,16);string str_r2 = r[r2].Trim();//区位码第3位rnd=new Random(r2*unchecked((int)DateTime.Now.Ticks)+i);int r3=rnd.Next(10,16);string str_r3 = r[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 = r[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 void button2_Click(object sender, EventArgs e){CreateImage();}private void button1_Click(object sender, EventArgs e){if (txtCode.Text.Trim() == "")return;else{if (txtCode.Text.Trim() == txt){MessageBox.Show("提示:验证码输入正确!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information);}else{MessageBox.Show("提示:验证码输入错误,请重新输入!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);}}}}
}

代码下载

https://download.csdn.net/download/BADAO_LIUMANG_QIZHI/12243420

Winform中实现中文验证码(附代码下载)相关推荐

  1. Ionic+Angular实现中英国际化(附代码下载)

    场景 Ionic介绍以及搭建环境.新建和运行项目: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/106308166 在上面搭建起 ...

  2. ASP.NET的MVC中使用Cookie做身份验证(附代码下载)

    场景 ASP.NET的MVC中使用Session做身份验证(附代码下载): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/1071 ...

  3. JPA中实现双向多对多的关联关系(附代码下载)

    场景 JPA入门简介与搭建HelloWorld(附代码下载): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/103473937 ...

  4. ASP.NET 2.0 HttpHandler实现生成图片验证码(示例代码下载)

    学习整理了一下 (一).功能 用HttpHandler实现图片验证码 (二).代码如下 1. 处理程序文件 ValidateImageHandler.ashx代码如下  1 <%@ WebHan ...

  5. Ionic+Angular+Express实现前后端交互使用HttpClient发送get请求数据并加载显示(附代码下载)

    场景 Ionic介绍以及搭建环境.新建和运行项目: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/106308166 在上面搭建起 ...

  6. Dubbo与SpringBoot整合流程(从实例入手,附代码下载)

    场景 Dubbo环境搭建-管理控制台dubbo-admin实现服务监控: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/10362 ...

  7. 从实例一步一步入门学习SpringCloud的Eureka、Ribbon、Feign、熔断器、Zuul的简单使用(附代码下载)

    场景 SpringCloud -创建统一的依赖管理: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/102530574 Sprin ...

  8. 分布式消息总线,基于.NET Socket Tcp的发布-订阅框架之离线支持,附代码下载

    一.分布式消息总线以及基于Socket的实现 在前面的分享一个分布式消息总线,基于.NET Socket Tcp的发布-订阅框架,附代码下载一文之中给大家分享和介绍了一个极其简单也非常容易上的基于.N ...

  9. Winform中通过NPOI导出Excel的三种方式(HSSFWorkbook,XSSFWorkbook,SXSSFWorkbook)附代码下载

    场景 HSSFworkbook,XSSFworkbook,SXSSFworkbook区别 HSSFWorkbook: 是操作Excel2003以前(包括2003)的版本,扩展名是.xls:导出exce ...

最新文章

  1. input 的read only 和 disable的区别
  2. python 曲线多项式拟合
  3. vs2015 QT5.6 兼容xp系统
  4. 腾讯企业IT部安全运营中心总监蔡晨:十年沉淀,腾讯iOA为企业安全保驾护航...
  5. debug和release的区别
  6. 深入理解K8S网络原理上
  7. WORD如何一键转PPT
  8. leetcode971. Flip Binary Tree To Match Preorder Traversal
  9. 【大数据实战】Logstash采集-Kafka-ElasticSearch检索
  10. Linux使用进程id跟踪程序,使用linux的pidof命令返回运行程序的进程ID
  11. python第五章自己的笔记总结(6)
  12. 电脑清灰你要知道的那些事(二)
  13. 常用的向量矩阵求导公式
  14. 如何解决安装DreamWeaver8 时候提示“无法将数值写入键/SOFTWARE/classes/.shtml”
  15. ISP(八) Gamma原理详解
  16. 6-2 折半查找的实现 (10 分)
  17. 封装802.1Q与 ISL的区别
  18. Windows 10 安装使用TensorFlow-GPU
  19. ppt的字母上面插入尖号
  20. python opencv调用摄像头并追踪移动物体,浅析Python+OpenCV使用摄像头追踪人脸面部血液变化实现脉搏评估...

热门文章

  1. java date oracle_java对象属性为date oracle数据库字段为Timestamp 处理方式
  2. 你知道从浏览器发送请求给SpringBoot后端时,是如何准确找到哪个接口的?(下篇)学废了吗?
  3. java二叉堆_为什么二叉堆利用数组存储?
  4. python常用关键字意思_python基础之常用关键字总结
  5. ecshop 搜索热词推荐_拼多多搜索推广实操——如何选择正确的关键词实现高投产!...
  6. simple html dom img,simple_html_dom学习过程(1)查找元素
  7. linux进程被中断打断,linux – 当中断处理程序被另一个中断中断时,中断上下文如何“恢复”?...
  8. bulkwrite 批量插入_SQL SERVER 使用BULK Insert将txt文件中的数据批量插入表中(1)
  9. mysql动态sql循环语句_mysql存储过程循环遍历sql结果集,并执行动态sql
  10. fasttext在二分类问题中,recall与precision值是相同的,why