链接地址:http://blog.sina.com.cn/s/blog_407a68fc010006qo.html

1、一共需要2个常用java文件(RandomCode.java和RandomCodeCtrl.java):
 
(a、)RandomCode.java是个普通的java文件;内容如下:
 
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.util.Random;
import javax.imageio.ImageIO;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
 public class RandomCode {
   /**
    * 随机取得一个字体
    * @param Random random  随机数
    * @return Font 返回一个新字体
    */ 
  private Font getsFont(Random random){
   return new Font("Fixedsys",Font.CENTER_BASELINE,18);
  }
   /**
    * 返回一个随机颜色
    * @param int fc  随机数
    * @param int bc  随机数
    * @param Random random  随机数
    * @return Color 返回一个新颜色
    */ 
  private Color getRandColor(int fc,int bc,Random random){
        if(fc>255) fc=255;
        if(bc>255) bc=255;
        int r=fc+random.nextInt(bc-fc-6);
        int g=fc+random.nextInt(bc-fc-4);
        int b=fc+random.nextInt(bc-fc-8);
        return new Color(r,g,b);
    }
   /**
    * 生成随机数图片
    */ 
  public void getRandcode(HttpServletRequest request,HttpServletResponse response)throws Exception{
   System.setProperty("java.awt.headless","true");
   HttpSession session = request.getSession();
   int width=80, height=22;//设置图片大小
   BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
   Graphics g = image.getGraphics();
   Random random = new Random();
   g.fillRect(1, 1, width, height);//设定边框
   g.setFont(new Font("Times New Roman",Font.ROMAN_BASELINE,18));
   g.setColor(getRandColor(111,133,random));
   //产生随机线
   for (int i=0;i<11;i++){
    int x = random.nextInt(width);
    int y = random.nextInt(height);
    int xl = random.nextInt(13);
    int yl = random.nextInt(15);
    g.drawLine(x,y,x+xl,y+yl);
   }
   //产生随机点
   g.setColor(getRandColor(130,150,random));
   //产生5个随机数
   String sRand="";
   for (int i=0;i<5;i++){
       g.setFont(getsFont(random));
       g.setColor(new Color(random.nextInt(101),random.nextInt(111),random.nextInt(121)));
       String rand=String.valueOf(getRandomString(random.nextInt(36)));
       sRand+=rand;
       g.translate(random.nextInt(3),random.nextInt(3));
       g.drawString(rand,13*i,16);
   }
   session.removeAttribute("Rand");
   session.setAttribute("Rand",sRand);
   g.dispose();
   ImageIO.write(image, "JPEG", response.getOutputStream());
  }
  
  private String getRandomString(int num){
   String randstring = "0123456788ABCDEFGHIJKLMNOPQRSTUVWXYZ";
   return String.valueOf(randstring.charAt(num));
  }
 
 }
 
(b、) RandomCodeCtrl.java是个servlet的java文件;内容如下:
 
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
public class RandomCodeCtrl extends HttpServlet {
 private static final long serialVersionUID = 1L;
 protected void doGet(HttpServletRequest req,
      HttpServletResponse resp) throws ServletException, IOException {
  resp.setContentType("image/jpeg");
  resp.setHeader("Pragma","No-cache");
  resp.setHeader("Cache-Control","no-cache");
  resp.setDateHeader("Expires", 0);
  RandomCode rc = new RandomCode();
  try{
   rc.getRandcode(req,resp);
  }catch(Exception e){
   System.err.println(e);
  }
 }
 public void doPost(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
  doGet(request, response);
 }
}
 
2、前台页面调用;举例:
<img src="http://127.0.0.1:8080/RandomCodeCtrl" />
 
3、验证输入信息和随机生成的图片显示的内容相同:
  在RandomCode.java代码中随机生成的图片之前,就把随机生成的图片显示的内容放在session中;所以只需判断session中getAttribute("Rand")的值和用户页面输入的验证码值相等即可。

java实现随机验证码的图片的更多相关文章

  1. Java生成随机验证码

    package com.tg.snail.core.util; import java.awt.Color; import java.awt.Font; import java.awt.Graphic ...

  2. Java 实现随机验证码

    许多系统的注册.登录或者发布信息模块都添加的随机码功能,就是为了避免自动注册程序或者自动发布程序的使用. 验证码实际上就是随机选择一些字符以图片的形式展现在页面上,如果进行提交操作的同时需要将图片上的 ...

  3. java生成随机验证码图片

    import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.Graphics2D; i ...

  4. 如何用java生成随机验证码

     1.VerifyCode 类:   1 package com.HRuinger.enity;                          ImageIO.write(image, " ...

  5. python模块之PIL模块(生成随机验证码图片)

    PIL简介 什么是PIL PIL:是Python Image Library的缩写,图像处理的模块.主要的类包括Image,ImageFont,ImageDraw,ImageFilter PIL的导入 ...

  6. 基于Python Pillow库生成随机验证码

    from PIL import Image from PIL import ImageDraw from PIL import ImageFont import random class ValidC ...

  7. springboot搭建项目,实现Java生成随机图片验证码。

    这篇文章主要介绍了如何通过Java如何生成验证码并验证.验证码的作用我想必大家都知道,话不多说开始实施! 首先创建一个springboot项目以下是项目结构,内有utli工具类.存放生成图片验证码方法 ...

  8. 用Java制作一个简单的图片验证码

    //Java实现简单验证码功能 package project; import java.awt.Color; import java.awt.Font;import java.awt.Graphic ...

  9. java生成简单验证码图片

    概要 最近项目需要用java实现输出随机验证码图片到前台,正好有机会接触下java的绘图类,完成需求后也有时间做个总结,写篇随笔记录下也希望能帮助到有同样需求的人! 需求流程图 1.生成随机数 在ja ...

随机推荐

  1. List(双向链表)

    List是一种双向链表结构,可以从第一个元素开始删除.插入,也可以从最后一个元素删除.插入,下面介绍一下 List 中常用的几个函数: 一.List 中的 begin 和 end 函数 : 和其他几种 ...

  2. 帝国cms语句调用

    帝国cms系统,灵动标签,有着非常强大的数据调用功能.这里为广大菜鸟站长普及一下. 我们来看这段代码. [e:loop={,,}] <li>·<a target="_bla ...

  3. 转:alphaImageLoader滤镜加载后 链接不能点击

    我是一个很少使用IE滤镜,也是一个不赞成使用IE滤镜的前端工程师.不过今天有一个朋友给我发来了一个有关于IE6的BUG,就是在IE6中使用了AlphaPNG透明的IE滤镜之后,a链接不能够点击.具体情 ...

  4. Android开发中怎样调用系统Email发送邮件(多种调用方式)

    在Android中调用其他程序进行相关处理,几乎都是使用的Intent,所以,Email也不例外,所谓的调用Email,只是说Email可以接收Intent并做这些事情 我们都知道,在Android中 ...

  5. Hibernate 知识提高

    主键生成策略有: UUID,increment.Hilo.assigned:对数据库无依赖 identity:依赖Mysql或sql server,主键值不由hibernate维护 sequence: ...

  6. hdu2964-Prime Bases

    http://acm.hdu.edu.cn/showproblem.php?pid=2964 题意,给你一个整数n,现在要你分解成 n = k1 * ( 2 * 3 * ....*x1 ) + k2 ...

  7. JS 排列组合

    function $CL(arr, n, noLC, arrDan) { //从arr中取n个组合,然后 var r = [], sum = 0; n = n - arrDan.length; (fu ...

  8. [译]Stairway to Integration Services Level 15 – SSIS 参数回顾

    介绍 在本文中我们会研究SSIS变量姐妹: SSIS 变量. 我们会演示参数配置,通过包参数管理动态属性值,然后会演示SSIS包执行的时候参数怎么被配置的. SSIS Parameters 101 S ...

  9. 「OC」 基本语法

    一.OC简介 在C语言的基础上,增加了一层最小的面向对象语法:完全兼容C语言:可以在OC代码中混入C语言代码,甚至是C++代码:可以使用OC开发Mac OS X平台和iOS平台的应用程序. 二.OC语 ...

  10. iOS推送介绍

    iOS消息推送的工作机制可以简单的用下图来概括: Provider是指某个iPhone软件的Push服务器,APNS是Apple Push Notification Service的缩写,是苹果的服务 ...