使用java怎么实现一个动态验证码功能-创新互联

使用java怎么实现一个动态验证码功能?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

成都创新互联服务项目包括青海网站建设、青海网站制作、青海网页制作以及青海网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,青海网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到青海省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!

Java可以用来干什么

Java主要应用于:1. web开发;2. Android开发;3. 客户端开发;4. 网页开发;5. 企业级应用开发;6. Java大数据开发;7.游戏开发等。

具体内容如下

【实现效果】

  • 点击图片或者文字可以更换验证码

  • 验证码随机生成,由大小写字母和数字组成

  • 验证码字体颜色随机生成,字母角度有偏转

  • 干扰线随机分布

使用java怎么实现一个动态验证码功能

使用java怎么实现一个动态验证码功能

验证码的功能: 防止恶意的表单注册

VerificationCode.java 验证码功能实现

package com.iqqcode.servlet.checkcode;

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 java.awt.*;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Random;


@WebServlet("/VerificationCode")
public class VerificationCode extends HttpServlet {
 @Override
 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
 int width = 120;
 int height = 50;

 //1.创建对象,验证码图片对象
 BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);

 //2.美化图片
 //2.1填充背景色
 //Graphics g = image.getGraphics();
 Graphics2D g = (Graphics2D) image.getGraphics();//画笔对象,2D来旋转验证码字母
 g.setColor(Color.WHITE);//设置画笔颜色
 g.fillRect(0, 0, width, height);

 //2.2画边框
 g.setColor(Color.BLUE);
 g.drawRect(0, 0, width - 1, height - 1);

 //2.3生成验证码
 String str = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
 //生成随机角标
 Random random = new Random();
 //改变字体
 g.setFont(new Font("宋体",Font.BOLD,35));

 //将验证码偏转并写到画布上
 for (int i = 1; i <= 4; i++) {
  int x = width/5 * i;
  int y = height/2;
  String msg = "";
  int index = random.nextInt(str.length());
  //获取字符
  char ch = str.charAt(index);//随机字符
  //获取正负30的角度
  int angle = random.nextInt(60) - 30;
  double radian = angle * Math.PI/180;
  //设置验证码中的字体颜色
  //g.setColor(Color.BLUE);
  int red = 0; int green = 0; int blue = 0;
  int codeY = 32;
  // 得到随机产生的验证码数字
  // 产生随机的颜色分量来构造颜色值,使输出的每位数字的颜色值都不同
  red = random.nextInt(255);
  green = random.nextInt(255);
  blue = random.nextInt(255);
  // 用随机产生的颜色将验证码绘制到图像中
  g.setColor(new Color(red, green, blue));
  //写验证码
  g.rotate(radian, x, y);
  //把字母画在画布上
  //g.drawString(ch+"", x, y);
  g.drawString(String.valueOf(ch)+"", x, codeY);
  //把每次旋转的再旋转回来
  g.rotate(-radian, x, y);
  //每次向右移动20像素
  x += 15;
  msg += ch;
 }

 //2.4随机产生20条干扰线,使图象中的认证码不易被其它程序探测到
 g.setColor(Color.MAGENTA);
 //随机生成坐标点
 for (int i = 0; i < 20; i++) {
  int x1 = random.nextInt(width);
  int x2 = random.nextInt(width);
  int y1 = random.nextInt(height);
  int y2 = random.nextInt(height);
  g.drawLine(x1, x2, y1, y2);
 }

 //3.将图片输出到页面展示
 //将图片对象写入流中
 ImageIO.write(image, "jpg", response.getOutputStream());
 }

 @Override
 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
 this.doPost(request, response);
 }
}

insex.jsp 前台页面展示

分析:

  • 点击超链接或者图片,需要换一张

  • 给超链接和图片绑定单击事件

  • 重新设置图片的src属性值

生成的图片先要缓存在本地,每次请求是不会修改,所以验证码图片不会切换;
将图片路径后添加时间戳,通过错误的路径来欺骗服务器重新请求

<%@ page contentType="text/html;charset=UTF-8" language="java" %>


 验证码
 


验证码动态实现

看不清?换一张

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注创新互联行业资讯频道,感谢您对创新互联网站建设公司,的支持。


分享名称:使用java怎么实现一个动态验证码功能-创新互联
网页URL:http://myzitong.com/article/dcgdgd.html