1.java的动态验证码我这里将介绍两种方法:

一:根据java本身提供的一种验证码的写法,这种呢只限于大家了解就可以了,因为java自带的模式编写的在实际开发中是没有意义的,所以只供学习一下就可以了,待会讲解的第二种呢就是我们需要掌握的一种模式了:

第一种的代码如下:

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;

import javax.servlet.http.HttpSession;

/**

* Servlet implementation class inde

*/

@WebServlet("/inde")

public class inde extends HttpServlet {

private static final long serialVersionUID = 1L;

/**

* @see HttpServlet#HttpServlet()

*/

public inde() {

super();

// TODO Auto-generated constructor stub

}

/**

* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)

*/

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

this.doPost(request, response);

}

/**动态生成图片验证码

* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)

*/

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

// TODO Auto-generated method stub

//创建图像

int width=100;

int height=40;

//图片的大小设置

BufferedImage image=new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);

//创建画板

Graphics g=image.getGraphics();

setSquareBackGround(g,width,height,5);

//确定画笔颜色

g.setColor(Color.black);

//填充矩形

g.fillRect(0, 0, width, height);

//在大矩形中放小矩形

g.setColor(Color.WHITE);

g.fillRect(1, 1, width-2, height-2);

//填充字符

String str = "qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM0123456789";

StringBuffer sb=new StringBuffer();

//画随机干扰框

setSquareBackGround(g,width,height,3);

//画干扰点

CreateRandomPoint(width, height,100,g,100);

//随机画几条线

CreateRandomLine(width, height,8,g,100);

//随机获取4个字符

Random random=new Random();

for (int i = 0; i < 4; i++) {

//62个填充字符里面随机的随机的收取字符

int index=random.nextInt(62);

//截取一个字符

String st=str.substring(index, index+1);

//把字符放到图片中去

g.setColor(Color.red);

//设置字体

g.setFont(new Font("宋体",Font.BOLD,30));

g.drawString(st, 20*i, 30);//防止4个字符在一起

sb.append(st);

}

//把StringBuffer中的验证码放到session里面,目的是让Login调用

HttpSession se=request.getSession();

se.setAttribute("number", sb.toString());

//发送图片到浏览器 指定发送的图片 和格式

response.setContentType("image/jpeg");

//图片,图片的格式,输出的方式

ImageIO.write(image, "jpg", response.getOutputStream());

}

Random rand = new Random();

private void CreateRandomPoint(int width,int height,int many,Graphics g,int alpha)

{ // 随机产生干扰点

for (int i=0;i

int x = rand.nextInt(width);

int y = rand.nextInt(height);

g.setColor(getColor(alpha));

g.drawOval(x,y,rand.nextInt(3),rand.nextInt(3));

}

}

/**

* 随机产生干扰线条

* @param width

* @param height

* @param minMany 最少产生的数量

* @param g

* @param alpha 透明度0~255 0表示全透

*/

private void CreateRandomLine(int width,int height,int minMany,Graphics g,int alpha)

{ // 随机产生干扰线条

for (int i=0;i

int x1 =getIntRandom(0,(int)(width*0.6));

int y1 =getIntRandom(0,(int)(height*0.6));

int x2 =getIntRandom((int)(width*0.4),width);

int y2 =getIntRandom((int)(height*0.2),height);

g.setColor(getColor(alpha));

g.drawLine(x1, y1, x2, y2);

}

}

/**

* 由随机产生的方块来作为干扰背景

*/

private void setSquareBackGround(Graphics g,int width,int height,int count){

// 随机产生干扰线条

for (int i=0;i

int x1 =getIntRandom(0,(int)(width*0.3));

int y1 =getIntRandom(0,(int)(height*0.3));

int x2 =getIntRandom((int)(width*0.5),width);

int y2 =getIntRandom((int)(height*0.55),height);

g.setColor(getColor(100));

int w=x2-x1;

int h=y2-y1;

if(w<0) w=-w;

if(h<0) h=-h;

g.drawRect(x1, y1, w, h);

g.setColor(getColor(25));

g.fillRect(x1, y1, w, h);

}

}

private int getIntRandom(double start,double end)

{ if(end

{

double t=end;

end=start;

start=t;

}

double i=start+(int) (Math.random()*(end-start));

return (int)i;

}

上面的代码呢写的很详细了,这里我就不重复了,这里的干扰线条是有很多写法的,我这里就没有全写出来,有需要的话可以私聊我哦!

下面介绍第二种:

这种呢是我们开发中是可以用得到的,使用在的是网页端的交互,我们在登录网站的时候有很多的验证码就可以用这个来写了

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;

import javax.servlet.http.HttpSession;

/**

* Servlet implementation class inde

*/

@WebServlet("/inde")

public class inde extends HttpServlet {

private static final long serialVersionUID = 1L;

/**

* @see HttpServlet#HttpServlet()

*/

public inde() {

super();

// TODO Auto-generated constructor stub

}

/**

* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)

*/

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

this.doPost(request, response);

}

/**动态生成图片验证码

* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)

*/

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

// TODO Auto-generated method stub

//创建图像

int width=100;

int height=40;

//图片的大小设置

BufferedImage image=new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);

//创建画板

Graphics g=image.getGraphics();

setSquareBackGround(g,width,height,5);

//确定画笔颜色

g.setColor(Color.black);

//填充矩形

g.fillRect(0, 0, width, height);

//在大矩形中放小矩形

g.setColor(Color.WHITE);

g.fillRect(1, 1, width-2, height-2);

//填充字符

String str = "qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM0123456789";

StringBuffer sb=new StringBuffer();

//随机获取4个字符

Random random=new Random();

for (int i = 0; i < 4; i++) {

//62个填充字符里面随机的随机的收取字符

int index=random.nextInt(62);

//截取一个字符

String st=str.substring(index, index+1);

//把字符放到图片中去

g.setColor(Color.red);

//设置字体

g.setFont(new Font("宋体",Font.BOLD,30));

g.drawString(st, 20*i, 30);//防止4个字符在一起

sb.append(st);

}

//把StringBuffer中的验证码放到session里面,目的是让Login调用

HttpSession se=request.getSession();

se.setAttribute("number", sb.toString());

//发送图片到浏览器 指定发送的图片 和格式

response.setContentType("image/jpeg");

//图片,图片的格式,输出的方式

ImageIO.write(image, "jpg", response.getOutputStream());

}

这样就可以运行了,当然了我们可以在这里面加入第一种的干扰模块给拿过来这样就可以实现整体的一个效果了。

总结

以上所述是小编给大家介绍的Java动态验证码单线设计的两种方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

java校验码的设计_Java动态验证码单线设计的两种方法相关推荐

  1. java的动态验证码单线设计

    1.java的动态验证码我这里将介绍两种方法: 一:根据java本身提供的一种验证码的写法,这种呢只限于大家了解就可以了,因为java自带的模式编写的在实际开发中是没有意义的,所以只供学习一下就可以了 ...

  2. java发送get请求_java发送http get请求的两种方法(总结)

    长话短说,废话不说 一.第一种方式,通过HttpClient方式,代码如下: public static String httpGet(String url, String charset) thro ...

  3. java解压缩文件名乱码_解决JDKZipEntry压缩文件名乱码的两种方法

    当我们在创建java的项目过程中,有时候会遇到一些棘手的问题,就比如说:在JDk zipEntry压缩中文文件名出现乱码的问题.那么对于这个问题,我们应该怎样来解决呢?今天我们就一起来学习一下它的解决 ...

  4. java构造和解析json_Java构造和解析Json数据的两种方法详解一

    在www.json.org上公布了很多JAVA下的json构造和解析工具,其中org.json和json-lib比较简单,两者使用上差不多但还是有些区别.下面首先介绍用json-lib构造和解析Jso ...

  5. 动态修改dom node的两种方法性能比较

    Created by Jerry Wang, last modified on Sep 25, 2014 测试代码: <html> <script src="C:\User ...

  6. DataGridView动态添加新行的两种方法

    简单介绍如何为DataGridView控件动态添加新行的两种方 法: 方法一: int index=this.dataGridView1.Rows.Add(); this.dataGridView1. ...

  7. vue项目动态设置浏览器标题title两种方法

    各位铁汁们,老步骤先效果图奉上 方法一.使用插件vue-wechat-title来设置浏览器动态标题 第一步:安装插件 1. npm vue-wechat-title --save 第二步:在全局ma ...

  8. java成员变量怎么赋值_给成员变量赋值的两种方法

    JAVA 跟C++ 差不多,给类里面的私有成员变量一般有两种方法: 一种是通过 成员函数 来赋值 一种是:通道构造函数来赋值 /* 我们一直在使用构造方法,但是,我们确没有定义构造方法,用的是哪里来的 ...

  9. JAVA中string的赋值_Java中关于String赋值的两种形式

    说明: String在java中是使用频率很高的一个类,之前使用的时候并没有过多的在意,只知道有两种赋值方式,一种是采用字面值方式(String string1 = "string" ...

最新文章

  1. Chapter09-内核模式下的线程同步之事件内核对象
  2. 130个你需要了解的VIM命令
  3. 一文带你纵览 200+ 大规模机器学习研究
  4. PHP开源AJAX框架
  5. 只用一个循环实现层序遍历
  6. bzoj 4873: [Shoi2017]寿司餐厅 [最小割]
  7. MySQL数据库索引面试题(最新版)
  8. java毕业设计和毕业论文怎么写,答辩流程是怎样的?
  9. 转子系统动力学模型matlab程序代码
  10. 单例模式,androidstudio简易app实例
  11. 电影TS/TC/SCR/R5/BD/HD/HC版本意思收集(转)
  12. 小虎电商浏览器:店透视应该如何查黑号?
  13. 视频语音转换成文字要怎么操作呢?
  14. 英文Essay写作中存在哪些门道?
  15. STM32+W25QXX实现模拟U盘-HAL库
  16. 【ARTS】01_06_左耳听风-20181217~1223
  17. ag-grid with web api
  18. 普元软件EOS荣膺2008最受欢迎SOA产品
  19. 算法设计与分析——位图(BitMap)
  20. python 提取批量xml文件中的坐标信息存入txt文件 xml文件转txt文件

热门文章

  1. openfoam安装中出现allmake error_深入理解 OpenFOAM 环境与编译过程
  2. python回复qq消息_自动给qq好友发消息
  3. 给JDK报了一个P4的Bug,结果居然……
  4. Spring Boot 中如何实现 HTTP 认证?
  5. 算法打卡39:喷水装置
  6. tomcat运行报错Failed to start component [StandardEngine[Catalina].StandardHost[localhost].
  7. svn教程----TortoiseSVN常用操作
  8. 【freemaker】ftl freemaker String常见操作语法
  9. 网络爬虫:采用“负载均衡”策略来优化网络爬虫
  10. 在R.java中新建自定义的新类