JAVA生成网页图片验证码
来源:互联网 发布:linux重置root密码忘记 编辑:程序博客网 时间:2024/05/18 11:08
网页验证码总所周知,前言略,看效果图
用最简单的话,完成最快的工作
1. 生成验证码图片的类
import java.awt.*;import java.awt.image.BufferedImage;import java.util.Random;import javax.imageio.ImageIO;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;/** * author : cnzxzc */public class RandomValidateCode { private Random random = new Random(); private int width = 80;//图片宽 private int height = 26;//图片高 private int lineNum = 5;//干扰线数量 private int pointNum = 30;//噪点数量 private int stringNum = 4;//随机产生字符数量 private Font font = new Font("Times New Roman", Font.ROMAN_BASELINE, 18); private char[] index = {'a','A','0'};//验证码索引 /** * 生成验证码字符串 */ private char[] getValidateString(){ char[] c = new char[stringNum]; for(int i = 0; i<stringNum; i++) { int offset = random.nextInt(3); switch (offset) { case 0: case 1: c[i] = (char) ((int) index[offset] + random.nextInt(26)); break; case 2: c[i] = (char) ((int) index[offset] + random.nextInt(10)); break; } } return c; } /** * 生成图片 * */ public void makeValidateImage(HttpServletRequest request, HttpServletResponse response){ //验证码 char[] text = getValidateString(); BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); Graphics2D g = image.createGraphics(); g.setFont(font); g.setColor(Color.GREEN); g.drawRect(0, 0, width, height); g.setColor(Color.WHITE); g.fillRect(0, 0, width, height); //绘制干扰线 drowLine(g); //绘制噪点 drowPoint(g); //绘制随机字符 drowString(g, text); try { request.getSession().setAttribute("validateCode", new String(text)); ImageIO.write(image, "JPEG", response.getOutputStream()); } catch (Exception e){ e.printStackTrace(); }finally { g.dispose(); } } /** * 绘制字符串 * */ private void drowString(Graphics g, char[] text){ g.setColor(new Color(random.nextInt(101), random.nextInt(111), random.nextInt(121))); int x = random.nextInt(width); int y = random.nextInt(height); //防止画图画出范围 while(x>25){ x -= 20; } while(y<13){ y += 10; } g.drawChars(text, 0, stringNum, x, y); } /** * 绘制干扰线 */ private void drowLine(Graphics g){ for(int i = 0; i < lineNum; i++) { g.setColor(new Color(random.nextInt(101), random.nextInt(111), random.nextInt(121))); int x1 = random.nextInt(width); int y1 = random.nextInt(height); int x2 = random.nextInt(width); int y2 = random.nextInt(height); g.drawLine(x1, y1, x2, y2); } } /** * 绘制噪声点 */ private void drowPoint(Graphics g){ for(int i = 0; i < pointNum; i++) { g.setColor(new Color(random.nextInt(101), random.nextInt(111), random.nextInt(121))); int x = random.nextInt(width); int y = random.nextInt(height); g.drawLine(x, y, x, y); } }}
2. Servlet文件有两个,一个用于启动,一个用于ajax校验
要是用struts或者Spring就不用两个文件这么麻烦了
//用于启动的servletprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { RandomValidateCode r = new RandomValidateCode(); r.makeValidateImage(request, response); }
//用于校验的Servletprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String validateCode = (String) (request.getSession().getAttribute("validateCode")); response.getWriter().write(validateCode); }
3. 页面代码( jsp )
<%@ page contentType="text/html;charset=UTF-8" language="java" %><html> <head> <title>sy6</title> <script type="text/javascript" src="http://static.hdslb.com/js/jquery.min.js"></script> <script type="text/javascript"> function check(code){ $.ajax({ type:"post", url:"${pageContext.request.contextPath}/CheckServlet", data: "code=" + code, success:function(data){ if(data!=code) { document.getElementById("mes").innerHTML = "<p style='color: red;'>错误</p>"; } else document.getElementById("mes").innerHTML = "<p style='color: GREEN;'>√</p>"; } }); } </script> <style type="text/css"> #main{ width:540px; padding:10px; margin:250px auto; text-align:center; border-radius:5px; box-shadow:-2px 0 10px #ccc,2px 0 10px #ccc; } #main button{ width: 70px; height: 50px; font-size: 16px; color: white; background-color: dodgerblue; border: none; border-radius: 10px; box-shadow:-2px 0 10px #ccc,2px 0 10px #ccc; } </style> </head> <body> <div id="main"> <form action="${pageContext.request.contextPath}/ForwardServlet" id="form"> <img id="validate" src="${pageContext.request.contextPath}/ValidateServlet"> <input type="text" name="key" onchange="check(this.value)"><div id="mes"></div><br> <input type="submit"> </form> </div> </body></html>
效果如开头的图所示
0 0
- JAVA生成网页图片验证码
- Java Web:使用Servlet生成网页随机图片验证码
- 网页编程---生成图片验证码技术
- Java生成图片验证码
- Java生成验证码图片
- Java生成图片验证码
- Java生成图片验证码
- JAVA 生成验证码图片
- Java生成图片验证码
- Java生成验证码图片
- java生成验证码图片
- java生成验证码图片
- java 生成图片验证码
- java生成图片验证码
- java验证码图片生成
- JAVA生成图片验证码
- JAVA生成图片验证码
- java--生成图片验证码
- 模板方法模式(java语言实现)
- 从零开始,写一个搜索引擎 (0x01)
- 深入Linux内存管理
- (转)关于cuda 显卡停止响应问题
- Keil MDK5生成 .bin文件的简单教程(图文)
- JAVA生成网页图片验证码
- 小试讯飞语音的听写功能
- pcl点云PCD文件
- androidStudio出现Executing tasks: [:app:assembleDebug]等错误不能运行程序
- 用Golang写一个搜索引擎(0x02)
- mysql用户权限相关
- java中HashSet和LinkedHashSet
- mysql修改root密码
- C语言模拟php basename() 函数