验证码生成
来源:互联网 发布:pokemon go unity源码 编辑:程序博客网 时间:2024/06/03 23:27
package com.hpe.servlet;import java.awt.Color;import java.awt.Font;import java.awt.Graphics;import java.awt.image.BufferedImage;import java.io.IOException;import java.util.Random;import javax.imageio.ImageIO;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;@WebServlet("/ValidateCodeServlet")public class ValidateCodeServlet extends HttpServlet { private static final long serialVersionUID = 1L; public ValidateCodeServlet() { super(); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 响应头信息 response.setHeader("Pragma", "No-Cache"); response.setHeader("Cache-Control", "no-cache"); response.setDateHeader("Expries", 0); // 随机数生成类 Random random = new Random(); // 定义验证码的位数 int size = 5; // 定义变量保存生成的验证码 String vCode = ""; char c; // 产生验证码 for (int i = 0; i < size; i++) { // 产生一个26以内的随机整数 int number = random.nextInt(26); // 如果生成的是偶数,则随机生成一个数字 if (number % 2 == 0) { c = (char) ('0' + (char) ((int) (Math.random() * 10))); // 如果生成的是奇数,则随机生成一个字母 } else { c = (char) ((char) ((int) (Math.random() * 26)) + 'A'); } vCode = vCode + c; } // 保存生成的5位验证码 request.getSession().setAttribute("vCode", vCode); // 验证码图片的生成 // 定义图片的宽度和高度 int width = (int) Math.ceil(size * 20); int height = 50; BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); // 获取图片的上下文 Graphics gr = image.getGraphics(); // 设定图片背景颜色 gr.setColor(Color.WHITE); gr.fillRect(0, 0, width, height); // 设定图片边框 gr.setColor(Color.GRAY); gr.drawRect(0, 0, width - 1, height - 1); // 画十条干扰线 for (int i = 0; i < 5; i++) { int x1 = random.nextInt(width); int y1 = random.nextInt(height); int x2 = random.nextInt(width); int y2 = random.nextInt(height); gr.setColor(randomColor()); gr.drawLine(x1, y1, x2, y2); } // 设置字体,画验证码 gr.setColor(randomColor()); gr.setFont(randomFont()); gr.drawString(vCode, 10, 22); // 图像生效 gr.dispose(); // 输出到页面 ImageIO.write(image, "JPEG", response.getOutputStream()); } // 生成随机的颜色 private Color randomColor() { int red = r.nextInt(150); int green = r.nextInt(150); int blue = r.nextInt(150); return new Color(red, green, blue); } private String[] fontNames = { "宋体", "华文楷体", "黑体", "微软雅黑", "楷体_GB2312" }; private Random r = new Random(); // 生成随机的字体 private Font randomFont() { int index = r.nextInt(fontNames.length); String fontName = fontNames[index];// 生成随机的字体名称 int style = r.nextInt(4); int size = r.nextInt(3) + 24; // 生成随机字号, 24 ~ 28 return new Font(fontName, style, size); }}
阅读全文
0 0
- 验证码生成及验证
- 生成验证码并验证
- 验证码生成与验证
- C#生成验证码
- C#生成验证码
- 生成验证码
- 验证码生成
- 生成验证码
- JSP生成验证码
- 生成验证码
- 生成验证码
- 数字验证码生成
- 动态生成验证码
- 生成验证码(1)
- 生成验证码(2)
- c# 生成验证码
- 生成验证码图像
- 生成验证码
- charCode与keyCode的区别
- Java字符串写入文件三种方式
- nodejs(express)处理图片上传
- Java爬虫
- Android APP必备高级功能,消息推送之MQTT
- 验证码生成
- android 贪吃蛇简易实现
- HTTP 代理服务器技术选型之旅
- C++对象模型之内存布局一
- String、StringBuffer与StringBuilder之间区别
- webservice
- Linux进程入门学习(一)-认识进程
- 基于restful服务端接口(一)
- vue单页面之友盟代码统计