java 验证码生成
来源:互联网 发布:中世纪2优化9农业收入 编辑:程序博客网 时间:2024/06/04 19:21
package com.verifycode;import java.awt.Color;import java.util.Random;public class Util {/*// 随机产生5条干扰线,使图象中的认证码不易被其它程序探测到 for(int i=0;i<5;i++){ int x=random.nextInt(width); int y=random.nextInt(height); int x1=random.nextInt(width); int y1=random.nextInt(height); g.drawLine(x, y, x1, y1); }*//* //随机产生100个点,使图中认证码不易被其它程序探测到(线的起点和终点一样就是成一个点了) for(int i=0;i<100;i++){ int x=random.nextInt(width); int y=random.nextInt(height); g.drawLine(x, y, x, y); }*/ // 背景颜色随机输出的实现public static Color getRandColor(int lower,int upper){ Random random = new Random(); if(upper>255) upper=255; if(upper<1) upper=1; if(lower<1) lower=1; if(lower>255) lower=255; int r=lower+random.nextInt(upper-lower); int g=lower+random.nextInt(upper-lower); int b=lower+random.nextInt(upper-lower); return new Color(r,g,b); } }
<pre name="code" class="java">package com.verifycode;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.ServletOutputStream;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;@WebServlet("/VerifyCode")public class VerifyCode extends HttpServlet {private int i = 1; private static final long serialVersionUID = 1L; public VerifyCode() { super(); }protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {System.out.println(i++);int width = 150;int height = 60;BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);Graphics g = image.getGraphics();g.setColor(Util.getRandColor(200, 250)); // 背景颜色g.fillRect(0, 0, width, height); // 背景颜色g.setColor(Util.getRandColor(0, 255)); // 边框颜色g.drawRect(0, 0, width-1, height-1); //画边框Random random = new Random();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); g.drawLine(x1, y1, x2, y2); }for(int i=0;i<100;i++){ int x=random.nextInt(width); int y=random.nextInt(height); g.drawLine(x, y, x, y);} g.setColor(Util.getRandColor(160,200)); Font font = new Font("Small Fonts", Font.ITALIC,38); // 创建字体,字体的大小应该根据图片的高度来定。// Font font = new Font("Script", Font.ITALIC,38); // 创建字体,字体的大小应该根据图片的高度来定。// Font font = new Font("Consolas", Font.ITALIC,38); // 创建字体,字体的大小应该根据图片的高度来定。// Font font = new Font("Times New Roman", Font.ITALIC,38); // 创建字体,字体的大小应该根据图片的高度来定。 g.setFont(font);//设置字体 int length = 6; // 设置默认生成6个验证码 String s="赵钱孙李abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; // 设置备选验证码:包括"a-z"和数字"0-9" String sRand=""; // 用随机产生的颜色将验证码绘制到图像中。 // 生成随机颜色(因为是做前景,所以偏深) //调用函数出来的颜色相同,可能是因为种子太接近,所以只能直接生成 g.setColor(new Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110))); for(int i=0;i<length;i++){ String ch=String .valueOf(s.charAt(random.nextInt(s.length()))); sRand+=ch; g.drawString(ch, 22*i+12, (random.nextInt(5)-2)*i+40); //drawString(a,x,y)a为要画出来的东西,x和y表示要画的东西最左侧字符的基线位于此图形上下文坐标系的 (x, y) 位置处} //将生成的字符串存储在session中 HttpSession session=request.getSession(); session.setAttribute("checkCode", sRand); g.dispose();//图像生效 //禁止图像缓存 response.setHeader("Pragma", "No-cache"); response.setHeader("Cache-Control", "no-cache"); response.setDateHeader("Expires", 0); response.setContentType("image/jpeg"); //创建二进制的输出流 ServletOutputStream sos=response.getOutputStream(); // 将图像输出到Servlet输出流中。 ImageIO.write(image, "jpeg", sos); sos.flush(); sos.close(); System.out.println(sRand.toLowerCase()+"----");}protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {}}
0 0
- java生成验证码
- Java 生成验证码
- Java 验证码生成
- java生成验证码
- java生成验证码
- java生成验证码
- Java生成验证码
- Java生成验证码
- java生成验证码
- java生成验证码
- java验证码生成
- java生成验证码
- Java生成验证码
- java生成验证码
- Java生成验证码
- Java生成验证码
- JAVA--生成验证码
- java 生成验证码
- Scala讲座:面向对象和函数式的特点总结(1)
- CSS颜色渐变记录
- Java发送Mail总结
- android ExpandableListView BaseExpandableListAdapter
- hadoop1.1.2格式化出错:*is in an inconsistent state: storage directory does not exist or is not accessible
- java 验证码生成
- dsgfrdvgdewgedvfewg
- Linux下的OpenSSL编程
- Smarty3.1.18的配置和简单使用
- Java编程基础知识入门:变量与数据类型
- hdoj 1084 What Is Your Grade?
- java图片旋转 90度
- 随笔
- 分治策略算法之最大字数组和问题