动态生成验证码

知识点:

1. 对图像的操作

问题:

解决方案

 1 <%@ WebHandler Language="C#" Class="ValidateCode" %>
 2
 3 using System;
 4 using System.Web;
 5 using System.Drawing;
 6 using System.IO;
 7
 8 public class ValidateCode : IHttpHandler {
 9
10     public void ProcessRequest (HttpContext context) {
11         context.Response.ContentType = "text/plain";
12         //context.Response.Write("Hello World");
13         Random r = new Random();
14         int n = r.Next(10000,100000);
15         CreateValidateGraphic(n.ToString(),context);
16     }
17     /// <summary>
18     /// 创建验证码的图片
19     /// </summary>
20     /// <param name="containsPage">要输出到的page对象</param>
21     /// <param name="validateNum">验证码</param>
22     public void CreateValidateGraphic(string validateCode, HttpContext context)
23     {
24         Bitmap image = new Bitmap((int)Math.Ceiling(validateCode.Length * 12.0), 22);
25         Graphics g = Graphics.FromImage(image);
26         try
27         {
28             //生成随机生成器
29             Random random = new Random();
30             //清空图片背景色
31             g.Clear(Color.White);
32             //画图片的干扰线
33             for (int i = 0; i < 25; i++)
34             {
35                 int x1 = random.Next(image.Width);
36                 int x2 = random.Next(image.Width);
37                 int y1 = random.Next(image.Height);
38                 int y2 = random.Next(image.Height);
39                 g.DrawLine(new Pen(Color.Silver), x1, y1, x2, y2);
40             }
41             Font font = new Font("Arial", 12, (FontStyle.Bold | FontStyle.Italic));
42             System.Drawing.Drawing2D.LinearGradientBrush brush = new System.Drawing.Drawing2D.LinearGradientBrush(new Rectangle(0, 0, image.Width, image.Height),
43              Color.Blue, Color.DarkRed, 1.2f, true);
44             g.DrawString(validateCode, font, brush, 3, 2);
45             //画图片的前景干扰点
46             for (int i = 0; i < 100; i++)
47             {
48                 int x = random.Next(image.Width);
49                 int y = random.Next(image.Height);
50                 image.SetPixel(x, y, Color.FromArgb(random.Next()));
51             }
52             //画图片的边框线
53             g.DrawRectangle(new Pen(Color.Silver), 0, 0, image.Width - 1, image.Height - 1);
54             //保存图片数据
55             MemoryStream stream = new MemoryStream();
56             image.Save(stream, System.Drawing.Imaging.ImageFormat.Jpeg);
57             //输出图片流
58             context.Response.Clear();
59             context.Response.ContentType = "image/jpeg";
60             context.Response.BinaryWrite(stream.ToArray());
61         }
62         finally
63         {
64             g.Dispose();
65             image.Dispose();
66         }
67     }
68
69     public bool IsReusable {
70         get {
71             return false;
72         }
73     }
74
75 }

时间: 2024-12-28 08:14:43

动态生成验证码的相关文章

asp.net一般处理程序(.ashx)动态生成验证码案例。

{使用一般处理程序动态生成验证码} 1.新建WebSite项目,添加一般处理程序命名为  yzm.ashx,添加如下代码: public void ProcessRequest(HttpContext context)    {   //将context.Response.ContentType = "text/plain";修改为context.Response.ContentType = "image/JPEG";        context.Response

JSP动态生成验证码

(1)在登录应用中,为防止恶意登录,常常需要服务器动态生成验证码并存储在session作用范围中,最后以图像形式返回给客户端显示 (2)下边的代码实现的功能:写一个JSP页,动态生成一个验证码,存储在session作用范围内,并以图像形式返回给客户端显示. 另写一个JSP页面,引用此JSP页面生成的验证码: authen.jsp代码如下: <%@ page import="java.awt.*,java.awt.image.*,java.util.*,com.sun.image.codec

PHP 动态生成验证码

……机器人会在网站中搜寻允许他们插入广告的输入表单,在虚拟世界没有什么能阻挡它们胡作非为.这些机器人效率极高,完全不关心所攻击的表单的本来用途.它们唯一的目标就是用它们的垃圾广告覆盖你的内容,残忍地为它们的主人谋取广告收入. 要检验一个表单所面对的是一个真正的人,这种测试称为CAPTCHA(完全自动化公共图灵测试).目前最有效的方法是生成一个要求用户输入的随机通行短语,为了防止支持OCR(光学字符识别)的机器人破解系统,通行短语字母必须变形,或者用随机的直线和点进行部分模糊处理. /* 生成验证

jsp动态生成验证码详细代码

思路:页面加载时执行fnGetcode()方法,获取验证码所有信息:点击“点击图片更换” 再次执行fnGetcode()方法: 1):<body > <label>         验证码:         <input id="showco" type="hidden" value=""/>         <input type="text" id="code"

java动态生成验证码图片

package cn.lijun.checkimg; import java.awt.image.BufferedImage;import java.io.BufferedReader; import java.awt.Color;import java.io.FileReader;import java.io.IOException;import java.util.ArrayList;import java.util.List;import java.util.Random; import

在JSP中动态生成随机验证码,登录时后台校验验证码,以及如何避免同一个验证码被重复提交爆破密码

只需几步就可以生成动态随机的验证码,最终效果如下图: 一 前台显示页面login.jsp 其中验证码显示的是一张图片,链接指向的是生成验证码的servlet,同时点击图片后触发changeImg()这个js函数,使其动态生成一个新的验证码,这个函数中的参数t=Math.random()并不会参与验证码的生成,它的作用仅仅只是表示每次提交的并不是同一个请求,需要单独处理,完整的login.jsp代码如下: <%@ page language="java" contentType=&

用动态网页技术PHP生成验证码图片的源代码

文件a.php <? //checkNum.php session_start(); function random($len) { $srcstr="ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; mt_srand(); $strs=""; for($i=0;$i<$len;$i++){ $strs.=$srcstr[mt_rand(0,35)]; } return strtoupper($strs); } $str=ra

java随机动态生成汉字验证码图片的实例代码分享

原创不易,转载请注明出处:java随机动态生成汉字验证码图片的实例代码分享 代码下载地址:http://www.zuidaima.com/share/1809721113234432.htm 汉字验证码实现原理 将汉字和干扰线生成图片并将汉字保存到session,前台获取每次生成验证码图片并用文本框值和session值比较,功能相对来说还是比较简单的. 效果图,如下: 验证成功后: java随机动态生成汉字验证码图片的实例代码分享

PHP生成GIF动态图片验证码

<?php /** * 调用示例 * */ session_start(); $randCode = ''; //验证码随机 $str="abcdefghjkmnpqrstuvwsyzABCDEFGHJKMNPQRSTUVWSYZ23456789"; for($i=0;$i<4;$i++){ $safe.=substr($str,rand(0,strlen($str)),1); } $_SESSION["imgcode"]=$safe; ImageCod