最近在弄验证码,从网上找了些代码,再整理下帖在下面,供大家参考:
1.生成gif图片格式的
package com.cssweb.common.util; import java.io.*; import java.util.*; import com.sun.image.codec.jpeg.*; import javax.servlet.*; import javax.servlet.http.*; import java.awt.*; import java.awt.image.*; /* * 功能:调用AuthServlet可以生成一个验证码图片,图片的宽度和高度可以自定义 * 调用格式: /servlet/AuthServlet?width=60&height=20 * 或者/servlet/AuthServlet * 时间:2007-9-4 * * */ public class AuthServlet extends HttpServlet { private static final long serialVersionUID = 8433932715396048208L; private Font mFont=new Font("Times New Roman", Font.PLAIN,18);//设置字体 // 处理post public void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException { doGet(request,response); } public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException { // 取得一个1000-9999的随机数 HttpSession session=request.getSession();//request.getSession(false)当参数为false时,有可能不创建session response.setContentType("image/gif"); response.setHeader("Pragma","No-cache"); response.setHeader("Cache-Control","no-cache"); response.setDateHeader("Expires", 0); int width=60; int height=20; if(request.getParameter("width")!=null && !request.getParameter("width").equals("")) width = Integer.parseInt(request.getParameter("width")); if(request.getParameter("height")!=null && !request.getParameter("height").equals("")) height = Integer.parseInt(request.getParameter("height")); ServletOutputStream out=response.getOutputStream(); BufferedImage image=new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB); //设置图片大小的 Graphics gra=image.getGraphics(); Random random=new Random(); gra.setColor(getRandColor(200,250)); //设置背景色 gra.fillRect(0,0,width,height); gra.setColor(Color.black); //设置字体色 gra.setFont(mFont); // 随机产生155条干扰线,使图象中的认证码不易被其它程序探测到 gra.setColor(getRandColor(160,200)); for (int i=0;i<155;i++) { int x = random.nextInt(width); int y = random.nextInt(height); int xl = random.nextInt(12); int yl = random.nextInt(12); gra.drawLine(x,y,x+xl,y+yl); } // 取随机产生的认证码(4位数字) String sRand=""; for (int i=0;i<4;i++) { String rand=String.valueOf(random.nextInt(10)); sRand+=rand; // 将认证码显示到图象中 gra.setColor(new Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110)));//调用函数出来的颜色相同,可能是因为种子太接近,所以只能直接生成 gra.drawString(rand,13*i+6,16); } //System.out.println("showimage="+sRand); //session.setAttribute("getImg",sRand); session.setAttribute("vnum",sRand); //AuthCode = sRand; //session.putValue("AuthCode",sRand); JPEGImageEncoder encoder=JPEGCodec.createJPEGEncoder(out); encoder.encode(image); //out.flush(); } static Color getRandColor(int fc,int bc){//给定范围获得随机颜色 Random random = new Random(); if(fc>255) fc=255; if(bc>255) bc=255; int r=fc+random.nextInt(bc-fc); int g=fc+random.nextInt(bc-fc); int b=fc+random.nextInt(bc-fc); return new Color(r,g,b); } static public String getAuthCode(HttpSession session){//返回验证 return (String)session.getAttribute("AuthCode"); } }
2.生成png格式的图片
/* * @(#)version 1.0 Feb 25, 2009 * @author hujun * CodeMakerServlet.java * Copyright 2008 CSS WEB Microsystems, Inc. All rights reserved. * CSS WEB ROOM PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. */ package com.cssweb.common.util; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.image.BufferedImage; import java.io.IOException; import java.util.Date; import java.util.Random; import javax.imageio.ImageIO; import javax.servlet.ServletException; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; public class CodeMakerServlet extends HttpServlet { private static final long serialVersionUID = 8226534304924504314L; private Random random = new Random(new Date().getTime()); /* private Font[] codeFont = { new Font("Algerian", Font.BOLD, 65), new Font("Vivaldi", Font.BOLD, 85), new Font("Broadway", Font.BOLD, 60), new Font("Forte", Font.BOLD, 75) }; private Color[] color = { Color.BLACK, Color.RED, Color.DARK_GRAY, Color.BLUE }; */ String codeNumbers = ""; //int width = 250, height = 70; int width=80, height=25; public CodeMakerServlet() { super(); } public void destroy() { super.destroy(); } public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 清空缓冲区 response.reset(); // 注意这里的MIME类型 response.setContentType("image/png"); // 设置页面不缓存 response.setHeader("Pragma", "No-cache"); response.setHeader("Cache-Control", "no-cache"); response.setDateHeader("Expires", 0); // 创建一个 250X70 的图像 BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); // 得到图形环境对象 g Graphics g = image.getGraphics(); // 填充背景 g.setColor(getRandColor(240,255)); g.fillRect(0, 0, width, height); for (int i = 0; i<4; i++) { drawCode(g, i); } drawNoise(g, 100); // 绘制边框 g.setColor(Color.black); //g.setColor(getRandColor(160,200)); g.drawRect(0, 0, width - 1, height - 1); // 将验证码内容保存进session中 HttpSession session = request.getSession(); session.setAttribute("vnum", codeNumbers); // 重设字符串 codeNumbers = ""; // 利用ImageIO类的write方法对图像进行编码 ServletOutputStream sos = response.getOutputStream(); ImageIO.write(image, "PNG", sos); sos.close(); } // 绘制验证码 public void drawCode(Graphics graphics, int i) { int number = (int)(Math.random() * 10); graphics.setFont(new Font("Times New Roman",Font.PLAIN,24)); graphics.setColor(new Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110))); //graphics.setFont(codeFont); //graphics.setColor(color); graphics.drawString("" + number, 15*i+4, 18); codeNumbers += number; } // 绘制干扰线 public void drawNoise(Graphics graphics, int lineNumber) { graphics.setColor(getRandColor(160,200)); for (int i = 0; i<lineNumber; i++) { int x = random.nextInt(width); int y = random.nextInt(height); int xl = random.nextInt(12); int yl = random.nextInt(12); graphics.drawLine(x,y,x+xl,y+yl); } } // 处理 HTTP post 请求, 和doGet一样 public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } Color getRandColor(int fc,int bc){ if(fc>255) fc=255; if(bc>255) bc=255; int r=fc+random.nextInt(bc-fc); int g=fc+random.nextInt(bc-fc); int b=fc+random.nextInt(bc-fc); return new Color(r,g,b); } }
您还没有登录,请您登录后再发表评论
java 验证码 java 验证码 java 验证码 java 验证码
java 验证码识别 ocr java 验证码识别 ocr
java验证码识别示例
70.java验证码生成.zip70.java验证码生成.zip70.java验证码生成.zip70.java验证码生成.zip70.java验证码生成.zip70.java验证码生成.zip70.java验证码生成.zip70.java验证码生成.zip70.java验证码生成.zip70.java...
java验证码识别 JAVA知识巩固 源码 java验证码识别 java验证码识别
Java验证码框架.可实现多种验证很强大
Java彩色验证码Java彩色验证码Java彩色验证码Java彩色验证码Java彩色验证码JavaJava彩色验证码Java彩色验证码Java彩色验证码Java彩色验证码Java彩色验证码Java彩色验证码Java彩色验证码
java实现滑动验证码
学习时使用的验证码java程序,很简单,对于初学者帮助很大。
纯Java生成验证码图片工具类。使用时直接解压,将工具类导入Java项目即可,直接调用生成验证码方法即可。
java验证码组件Jcaptcha,希望对大家有所帮助!!!
java验证码识别源码,验证码生成地址自己添加,main 函数两个方法取消注释
java 验证码识别源程序 windows版本 概率90%以上
Java验证码生成库 JCaptcha
csdn上三种java验证码生成方法,以及谷歌开源验证码,总共四种验证码生成集合。将生成的四个验证图片放在一个页面上以供比对,全部可以运行。 四种方法分别为: 1. 数字、字母、汉字混合验证码,叠影(给力)、扭曲 ...
Java验证码案例,全新的Java验证码严重源码
生成java验证码 添加水印 添加干扰线 图片压缩 设置字体
java 验证码识别 OCR。
java实现验证码
java 验证码java 验证码java 验证码java 验证码java 验证码java 验证码java 验证码java 验证码java 验证码java 验证码java 验证码java 验证码java 验证码java 验证码java 验证码java 验证码java 验证码java 验证码...
相关推荐
java 验证码 java 验证码 java 验证码 java 验证码
java 验证码识别 ocr java 验证码识别 ocr
java验证码识别示例
70.java验证码生成.zip70.java验证码生成.zip70.java验证码生成.zip70.java验证码生成.zip70.java验证码生成.zip70.java验证码生成.zip70.java验证码生成.zip70.java验证码生成.zip70.java验证码生成.zip70.java...
java验证码识别 JAVA知识巩固 源码 java验证码识别 java验证码识别
Java验证码框架.可实现多种验证很强大
Java彩色验证码Java彩色验证码Java彩色验证码Java彩色验证码Java彩色验证码JavaJava彩色验证码Java彩色验证码Java彩色验证码Java彩色验证码Java彩色验证码Java彩色验证码Java彩色验证码
java实现滑动验证码
学习时使用的验证码java程序,很简单,对于初学者帮助很大。
纯Java生成验证码图片工具类。使用时直接解压,将工具类导入Java项目即可,直接调用生成验证码方法即可。
java验证码组件Jcaptcha,希望对大家有所帮助!!!
java验证码识别源码,验证码生成地址自己添加,main 函数两个方法取消注释
java 验证码识别源程序 windows版本 概率90%以上
Java验证码生成库 JCaptcha
csdn上三种java验证码生成方法,以及谷歌开源验证码,总共四种验证码生成集合。将生成的四个验证图片放在一个页面上以供比对,全部可以运行。 四种方法分别为: 1. 数字、字母、汉字混合验证码,叠影(给力)、扭曲 ...
Java验证码案例,全新的Java验证码严重源码
生成java验证码 添加水印 添加干扰线 图片压缩 设置字体
java 验证码识别 OCR。
java实现验证码
java 验证码java 验证码java 验证码java 验证码java 验证码java 验证码java 验证码java 验证码java 验证码java 验证码java 验证码java 验证码java 验证码java 验证码java 验证码java 验证码java 验证码java 验证码...