效果图:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMzgxNjcwOQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

底层类:

/// <summary>

        /// 生成验证码

        /// </summary>

        /// <param name="len">验证码长度</param>

        /// <returns></returns>

        private static string CreateRandomCode(int len) {

            System.Random rand = new Random();

            string randomCode = "";//随机码

            char[] Allchar = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'J', 'K', 'L', 'M', 'N', 'P', 'T', 'Q', 'W', 'X', 'Y', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'j', 'k', 'm', 'n', 'p', 'q', 't', 'w', 'x',
'y', 'z' };

            for (int i = 0; i < len; i++) {

                //生成一个小于Allchar.Length的随机数

                int a = rand.Next(Allchar.Length);

                randomCode += Allchar[a].ToString();

            }

            //验证码

            return randomCode;

        }

        /// <summary>

        /// 生成验证码,填充到PictureBox中

        /// </summary>

        /// <param name="len">验证码长度</param>

        /// <param name="pic">PictureBox名称</param>

        /// <param name="revolve">旋转度数</param>

        /// <param name="picHeight">图片高度</param>

        /// <param name="picWidth">图片宽度</param>

        /// <param name="charDistance">验证码中各个字符间距</param>

        /// <param name="fontSize">验证码字符的大小</param>

        public static string CreatePic(int len, PictureBox pic, int revolve, int picHeight, int picWidth, int charDistance, float fontSizes) {          

                //获取验证码

                string strCode = CreateRandomCode(len);

                //创建背景图片

                Bitmap map = new Bitmap(picWidth, picHeight);



                Graphics grap = Graphics.FromImage(map);

                //清除画面,填充背景色为AliceBlue

                grap.Clear(Color.AliceBlue);

                //画一个矩形边框

                grap.DrawRectangle(new Pen(Color.Black, 0), 0, 0, map.Width - 1, map.Height - 1);



                //模式

                grap.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;



                //画噪点

                System.Random rand = new Random();

                for (int i = 0; i < 50; i++) {

                    int x = rand.Next(0, map.Width - 1);

                    int y = rand.Next(0, map.Height - 1);

                    grap.DrawRectangle(new Pen(Color.Gray, 0), x, y, 1, 1);

                }





                //把字符串拆成单个字符

                char[] chars = strCode.ToCharArray();



                //文字居中

                StringFormat format = new StringFormat(StringFormatFlags.NoClip);

                format.Alignment = StringAlignment.Center;

                format.LineAlignment = StringAlignment.Center;



                //定义颜色

                Color[] colors = { Color.Red, Color.Black, Color.Blue, Color.Green, Color.Orange, Color.DarkCyan, Color.Purple };



                //定义字体

                string[] fonts = { "Arial", "Verdana", "Georgia", "Cambria Math", "华文中宋" };



                for (int j = 0; j < len; j++) {

                    //颜色,字体的随机数,随机数作为下标

                    int cindex = rand.Next(colors.Length);

                    int findex = rand.Next(fonts.Length);

                    //字符颜色

                    Brush b = new System.Drawing.SolidBrush(colors[cindex]);

                    //字体样式、大小

                    System.Drawing.Font f = new System.Drawing.Font(fonts[findex], fontSizes, FontStyle.Bold);

                    //定义一个点

                    System.Drawing.Point p = new System.Drawing.Point(16, 20);



                    //转动的角度数

                    float angle = rand.Next(-revolve, revolve);

                    //移动光标到指定位置

                    grap.TranslateTransform(p.X, p.Y);

                    //转动angle度

                    grap.RotateTransform(angle);

                    //赋值

                    grap.DrawString(chars[j].ToString(), f, b, 1, 1, format);



                    //转动回去

                    grap.RotateTransform(-angle);

                    //移动光标到指定位置

                    grap.TranslateTransform(charDistance, -p.Y);

                }



                pic.Image = map;

                pic.SizeMode = PictureBoxSizeMode.StretchImage;      

         

                return strCode;

        }

前台调用:

说明:

(1)窗口要有一个PictureBox控件

(2)DataAccess 是底层类名称

DataAccess.CreatePic(4, pic, 50, 40, 100, 3, 20);

winfrom 底层类 验证码的更多相关文章

  1. winfrom 底层类 验证码 分类: C# 2014-12-17 11:18 258人阅读 评论(0) 收藏

    效果图: 底层类: /// <summary>         /// 生成验证码         /// </summary>         /// <param n ...

  2. DevExpress MessageBox 弹出框 底层类

    效果图: 前台调用: //图一的前台调用 MessageBox.Show("测试", "标题", MessageBoxButtons.OK); //图二的前台调 ...

  3. DevExpress LookUpEdit 初始化(数据加载) 底层类

    (1)三个效果   1>传的参数较多,对数据表无要求,但可以设置下拉列的宽度和标题       2>传的参数很少,对数据表有要求(必须是处理好的)       3>传的参数一般,对数 ...

  4. Java工具类-验证码工具

    1.工具类,生成随机验证码字符串 import java.util.Arrays; /** * 工具类,生成随机验证码字符串 * * @version 1.0 * @author * */ publi ...

  5. java 工具类 验证码

    第一步: 引入工具类 工具类一: import java.awt.Color; import java.awt.Font; import java.awt.Graphics2D; import jav ...

  6. Java底层魔术类Unsafe用法简述

    1 引子 Java中没有指针,不能直接对内存地址的变量进行控制,但Java提供了一个特殊的类Unsafe工具类来间接实现.Unsafe主要提供一些用于执行低级别.不安全操作的方法,如直接访问系统内存资 ...

  7. 简单爬虫,突破IP访问限制和复杂验证码,小总结

    简单爬虫,突破复杂验证码和IP访问限制 文章地址:http://www.cnblogs.com/likeli/p/4730709.html   好吧,看题目就知道我是要写一个爬虫,这个爬虫的目标网站有 ...

  8. 【腾讯Bugly干货分享】腾讯验证码的十二年

    本文来自于腾讯bugly开发者社区,未经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/581301b146dfb1456904df8d Dev Club 是一个交流移动 ...

  9. java之Class类详解

    测试中需要用到的代码 InterfaceA代码: package jichu; interface InterfaceA { String s1 = "this is s1 in Inter ...

随机推荐

  1. JSON APIs and Ajax

    1. 通过jQuery来绑定点击事件. 函数 $(document).ready()这个函数中的代码只会在我们的页面加载时候运行一次,确保执行js之前页面所有的dom已经准备就绪. 在$(docume ...

  2. Knockout.js(三):计算属性(Computed Observable)

    在Knockout2.0之前,计算属性被称之为依赖属性,在2.0版本中,ko.dependentObservable重命名为ko.computed,因为它在读.解释和类型上更简单.在实际使用中,ko. ...

  3. [Luogu2540][NOIP2016]斗地主增强版(搜索+DP)

    增强版就是原版中两鬼不算对子的版本. 先爆搜出完所有对子,剩下的牌DP处理. 考虑每个数码的拆牌情况,最多可能被拆成5种情况:1+1+1+1,1+1+2,1+3,2+2,4.故DP状态数最多为5^13 ...

  4. BZOJ 2467 [中山市选2010]生成树(组合数学)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2467 [题目大意] 有一种图形叫做五角形圈.一个五角形圈的中心有1个由n个顶点和n条边 ...

  5. Eden的退役记

    好久没更博客了, 这篇随笔不同于之前的学术性随笔.游记,只是来发泄一下自己的情感,回忆一下自己的OI经历…… 五年的OI生涯结束了 初一:懵懂的我刚接触了OI,被其功能吸引.由于运气好过了初赛,然而复 ...

  6. 升级到XCode6后,iOS8里设置tableview的setSeparatorInset:UIEdgeInsetsZero不起作用的解决办法

    我们在使用tableview时会发现分割线的左边会短一些,通常可以使用 setSeparatorInset:UIEdgeInsetsZero 来解决.但是升级到XCode6之后,在iOS8里发现没有效 ...

  7. android:scrollbarStyle属性及滚动条和分割线覆盖问题

    android:scrollbarStyle可以定义滚动条的样式和位置,可选值有insideOverlay.insideInset.outsideOverlay.outsideInset四种. 其中i ...

  8. Java源代码编译过程

      编译其本质是将一种语言规范转换成另一种语言规范,即将Java语言规范转换为JVM虚拟机语言规范.结果就是.java文件到.class文件. 对于C/C++编译直接将高级语言转换为机器语言,Java ...

  9. [转]Java常用概念解答

    1. 事务是什么? 事务是作为一个逻辑单元执行的一系列操作,一个逻辑工作单元必须有四个属性,称为 ACID(原子性. 一致性.隔离性和持久性)属性,只有这样才能成为一个事务: 原子性 事务必须是原子工 ...

  10. Xcode8 报 ”xx“is missing from working copy 的问题解决方法

    方法一: Xcode->Preferences->Source->Enable Source Control 勾勾去掉 方法二: Xcode8更新后,编译工程一下子报出800多条类似 ...