验证码 完整代码

本文介绍了一个用于生成验证码图片的ASP.NET Web应用案例。该应用可根据请求参数动态调整验证码的长度、图片尺寸、字体样式等属性,并实现验证码的创建、干扰点添加及图片绘制等功能。

1using System;
  2
using System.Collections;
  3
using System.ComponentModel;
  4
using System.Data;
  5
using System.Drawing;
  6
using System.Drawing.Imaging;
  7
using System.Web;
  8
using System.Web.SessionState;
  9
using System.Web.UI;
 10
using System.Web.UI.WebControls;
 11
using System.Web.UI.HtmlControls;
 
12
 13
public partial class yanzzengma : System.Web.UI.Page
 
14{
 
15    // 验证码长度
 16    private int codeLen = 4;
 
17    // 图片清晰度
 18    private int fineness =90;
 
19    // 图片宽度
 20    private int imgWidth = 55;
 
21    // 图片高度
 22    private int imgHeight = 24;
 
23    // 字体家族名称
 24    private string fontFamily = "Times New Roman";
 
25    // 字体大小
 26    private int fontSize = 14;
 
27    // 字体样式
 28    private int fontStyle = 0;
 
29    // 绘制起始坐标 X
 30    private int posX = 0;
 
31    // 绘制起始坐标 Y
 32    private int posY = 0;
 
33    protected void Page_Load(object sender, EventArgs e)
 
34    {
 
35        读取 Request 传递参数读取 Request 传递参数
163
164        string validateCode = CreateValidateCode();
165
166        // 生成BITMAP图像
167        Bitmap bitmap = new Bitmap(imgWidth, imgHeight);
168
169        // 给图像设置干扰
170        DisturbBitmap(bitmap);
171
172        // 绘制验证码图像
173        DrawValidateCode(bitmap, validateCode);
174
175        // 保存验证码图像,等待输出
176        bitmap.Save(Response.OutputStream, ImageFormat.Gif);
177    }

178
179    Web 窗体设计器生成的代码Web 窗体设计器生成的代码
198
199    //------------------------------------------------------------
200    // 随机生成验证码,并保存到SESSION中
201    //------------------------------------------------------------
202    private string CreateValidateCode()
203    {
204        string validateCode = "";
205        int num=0;
206        // 随机数对象
207        Random random = new Random();
208
209        for (int i = 0; i < codeLen; i++)
210        {
211            // 26: a - z
212            int n = random.Next(26);
213           
214
215            // 将数字转换成大写字母
216            validateCode += (char)(n + 65);
217        }

218     
219        // 保存验证码
220        Session["ValidateCode"= validateCode;
221
222        return validateCode;
223    }

224
225    //------------------------------------------------------------
226    // 为图片设置干扰点
227    //------------------------------------------------------------
228    private void DisturbBitmap(Bitmap bitmap)
229    {
230        // 通过随机数生成
231        Random random = new Random();
232
233        for (int i = 0; i < bitmap.Width; i++)
234        {
235            for (int j = 0; j < bitmap.Height; j++)
236            {
237                if (random.Next(100<= this.fineness)
238                    bitmap.SetPixel(i, j, Color.White);
239            }

240        }

241    }

242
243    //------------------------------------------------------------
244    // 绘制验证码图片
245    //------------------------------------------------------------
246    private void DrawValidateCode(Bitmap bitmap, string validateCode)
247    {
248        // 获取绘制器对象
249        Graphics g = Graphics.FromImage(bitmap);
250
251        // 设置绘制字体
252        Font font = new Font(fontFamily, fontSize, GetFontStyle());
253
254        // 绘制验证码图像
255        g.DrawString(validateCode, font, Brushes.Black, posX, posY);
256    }

257
258    //------------------------------------------------------------
259    // 换算验证码字体样式:1 粗体 2 斜体 3 粗斜体,默认为普通字体
260    //------------------------------------------------------------
261    private FontStyle GetFontStyle()
262    {
263        if (fontStyle == 1)
264            return FontStyle.Bold;
265        else if (fontStyle == 2)
266            return FontStyle.Italic;
267        else if (fontStyle == 3)
268            return FontStyle.Bold | FontStyle.Italic;
269        else
270            return FontStyle.Regular;
271    }

272
273
274}
以下是一个简单的 Java Web 算术验证码实现的完整代码: 1. 首先在 JSP 页面中添加以下代码: ```html <form action="checkcode" method="post"> <label>请输入验证码:</label> <input type="text" name="code" /> <img src="code" onclick="this.src='code?'+Math.random()" /> <input type="submit" value="提交" /> </form> ``` 2. 创建一个 Servlet 类来生成验证码和验证用户输入的验证码代码如下: ```java import java.io.IOException; import java.io.OutputStream; import java.util.Random; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; public class CheckCodeServlet extends HttpServlet { private static final long serialVersionUID = 1L; // 验证码图片的宽度 private int width = 90; // 验证码图片的高度 private int height = 30; // 验证码字符个数 private int codeCount = 4; // 验证码干扰线数 private int lineCount = 20; // 验证码字符集合 private String codeChars = "0123456789"; // 验证码图片Buffer private BufferedImage buffImg = null; @Override public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 定义图像buffer buffImg = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); Graphics2D g = buffImg.createGraphics(); // 创建一个随机数生成器类 Random random = new Random(); // 设置背景色 g.setColor(Color.WHITE); g.fillRect(0, 0, width, height); // 创建字体,字体的大小应该根据图片的高度来定。 Font font = new Font("Times New Roman", Font.PLAIN, 20); // 设置字体。 g.setFont(font); // 画边框。 g.setColor(Color.BLACK); g.drawRect(0, 0, width - 1, height - 1); // 随机产生干扰线 g.setColor(Color.BLACK); for (int i = 0; i < lineCount; i++) { int x1 = random.nextInt(width); int y1 = random.nextInt(height); int x2 = random.nextInt(10) + x1; int y2 = random.nextInt(10) + y1; g.drawLine(x1, y1, x2, y2); } // 随机产生验证码字符 String code = ""; for (int i = 0; i < codeCount; i++) { // 得到随机产生的验证码数字。 String str = String.valueOf(codeChars.charAt(random.nextInt(codeChars.length()))); // 画出验证码。 g.setColor(new Color(random.nextInt(255), random.nextInt(255), random.nextInt(255))); g.drawString(str, 20 * i + 6, 25); code += str; } // 将验证码保存到Session中。 HttpSession session = request.getSession(); session.setAttribute("code", code); // 禁止图像缓存。 response.setHeader("Pragma", "no-cache"); response.setHeader("Cache-Control", "no-cache"); response.setDateHeader("Expires", 0); // 将图像输出到Servlet输出流中。 response.setContentType("image/jpeg"); OutputStream out = response.getOutputStream(); ImageIO.write(buffImg, "jpeg", out); out.close(); } @Override public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } } ``` 3. 创建一个 Servlet 类来验证用户输入的验证码代码如下: ```java import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; public class CheckCodeServlet extends HttpServlet { private static final long serialVersionUID = 1L; @Override public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 获取用户输入的验证码String code = request.getParameter("code"); // 获取Session中保存的验证码。 HttpSession session = request.getSession(); String sessionCode = (String) session.getAttribute("code"); // 比较用户输入的验证码Session中保存的验证码是否一致。 if (code.equalsIgnoreCase(sessionCode)) { // 验证码正确。 response.getWriter().write("验证码正确!"); } else { // 验证码错误。 response.getWriter().write("验证码错误!"); } } @Override public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } } ``` 以上就是一个简单的 Java Web 算术验证码实现的完整代码
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值