热门关键字:
jquery > jquery教程 > html5 > JAVA基础之设置随机成语验证码

JAVA基础之设置随机成语验证码

371
作者:管理员
发布时间:2020/3/26 10:36:07
评论数:0
转载请自觉注明原文:http://www.jq-school.com/Show.aspx?id=1110

  JAVA基础之设置随机成语验证码

  packagecom.oracle;

  importjava.awt.Color;

  importjava.awt.Font;

  importjava.awt.Graphics;

  importjava.awt.Graphics2D;

  importjava.awt.image.BufferedImage;

  importjava.io.BufferedReader;

  importjava.io.FileReader;

  importjava.io.IOException;

  importjava.util.ArrayList;

  importjava.util.List;

  importjava.util.Random;

  importjavax.imageio.ImageIO;

  importjavax.servlet.ServletException;

  importjavax.servlet.http.HttpServlet;

  importjavax.servlet.http.HttpServletRequest;

  importjavax.servlet.http.HttpServletResponse;

  /**

  *验证码生成程序

  *

  *

  *

  */

  publicclassCheckImgServletextendsHttpServlet{

  //集合中保存所有成语

  privateList<String>words=newArrayList<String>();

  @Override

  publicvoidinit()throwsServletException{

  //初始化阶段,读取new_words.txt

  //web工程中读取文件,必须使用绝对磁盘路径

  Stringpath=getServletContext().getRealPath("/WEB-INF/new_words.txt");

  try{

  BufferedReaderreader=newBufferedReader(newFileReader(path));

  Stringline;

  while((line=reader.readLine())!=null){

  words.add(line);

  }

  reader.close();

  }catch(IOExceptione){

  e.printStackTrace();

  }

  }

  publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)

  throwsServletException,IOException{

  //禁止缓存

  //response.setHeader("Cache-Control","no-cache");

  //response.setHeader("Pragma","no-cache");

  //response.setDateHeader("Expires",-1);

  intwidth=120;

  intheight=30;

  //步骤一绘制一张内存中图片

  BufferedImagebufferedImage=newBufferedImage(width,height,

  BufferedImage.TYPE_INT_RGB);

  //步骤二图片绘制背景颜色---通过绘图对象

  Graphicsgraphics=bufferedImage.getGraphics();//得到画图对象---画笔

  //绘制任何图形之前都必须指定一个颜色

  graphics.setColor(getRandColor(200,250));

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

  //步骤三绘制边框

  graphics.setColor(Color.WHITE);

  graphics.drawRect(0,0,width-1,height-1);

  //步骤四四个随机数字

  Graphics2Dgraphics2d=(Graphics2D)graphics;

  //设置输出字体

  graphics2d.setFont(newFont("宋体",Font.BOLD,18));

  Randomrandom=newRandom();//生成随机数

  intindex=random.nextInt(words.size());

  Stringword=words.get(index);//获得成语

  //定义x坐标

  intx=10;

  for(inti=0;i<word.length();i++){

  //随机颜色

  graphics2d.setColor(newColor(20+random.nextInt(110),20+random

  .nextInt(110),20+random.nextInt(110)));

  //旋转-30---30度

  intjiaodu=random.nextInt(60)-30;

  //换算弧度

  doubletheta=jiaodu*Math.PI/180;

  //获得字母数字

  charc=word.charAt(i);

  //将c输出到图片

  graphics2d.rotate(theta,x,20);

  graphics2d.drawString(String.valueOf(c),x,20);

  graphics2d.rotate(-theta,x,20);

  x+=30;

  }

  //将验证码内容保存session

  request.getSession().setAttribute("checkcode_session",word);

  //步骤五绘制干扰线

  graphics.setColor(getRandColor(160,200));

  intx1;

  intx2;

  inty1;

  inty2;

  for(inti=0;i<30;i++){

  x1=random.nextInt(width);

  x2=random.nextInt(12);

  y1=random.nextInt(height);

  y2=random.nextInt(12);

  graphics.drawLine(x1,y1,x1+x2,x2+y2);

  }

  //将上面图片输出到浏览器ImageIO

  graphics.dispose();//释放资源

  //将图片写到response.getOutputStream()中

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

  }

  publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)

  throwsServletException,IOException{

  doGet(request,response);

  }

  /**

  *取其某一范围的color

  *

  *@paramfc

  *int范围参数1

  *@parambc

  *int范围参数2

  *@returnColor

  */

  privateColorgetRandColor(intfc,intbc){

  //取其随机颜色

  Randomrandom=newRandom();

  if(fc>255){

  fc=255;

  }

  if(bc>255){

  bc=255;

  }

  intr=fc+random.nextInt(bc-fc);

  intg=fc+random.nextInt(bc-fc);

  intb=fc+random.nextInt(bc-fc);

  returnnewColor(r,g,b);

  }

  }

  <%@pagelanguage="java"contentType="text/html;charset=UTF-8"

  pageEncoding="UTF-8"%>

  <!DOCTYPEhtmlPUBLIC"-//W3C//DTDHTML4.01Transitional//EN""http://www.w3.org/TR/html4/loose.dtd">

  <html>

  <head>

  <metahttp-equiv="Content-Type"content="text/html;charset=UTF-8">

  <title>Inserttitlehere</title>

  <scripttype="text/javascript">

  functioncode(node){

  node.src="/WEB0/CheckImgServlet?time="+newDate().getTime();

  }

  </script>

  </head>

  <body>

  <imgsrc="/WEB0/CheckImgServlet"onclick="code(this)"><br>

  请输入验证码:<inputtype="text"name="pwd">

  </body>

  </html>





如果您觉得本文的内容对您的学习有所帮助:支付鼓励



关键字:JAVA
友荐云推荐