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;

/**

* @Author: Mr.Q

* @Date: 2020-02-12 10:12

* @Description:验证码生成

*/

@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属性值

生成的图片先要缓存在本地,每次请求是不会修改,所以验证码图片不会切换;

将图片路径后添加时间戳,通过错误的路径来欺骗服务器重新请求

验证码

window.onload = function () {

//1.获取图片对象

var img = document.getElementById("checkCode");

//2.绑定图片单击事件

img.onclick = function () {

//加时间戳

var date = new Date().getTime();

//加时间戳,防止浏览器利用缓存

img.src = "/ServletResponse/VerificationCode?" + date;

}

//绑定链接点击事件

var ahref = document.getElementById("change");

ahref.onclick = function () {

var date = new Date().getTime();

img.src = "/ServletResponse/VerificationCode?" + date;

}

}

验证码动态实现

看不清?换一张

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

java 实现动态验证码_java实现动态验证码相关推荐

  1. java邮箱验证码_Java实现邮箱验证码

    原标题:Java实现邮箱验证码 声明:本栏目所使用的素材都是凯哥学堂VIP学员所写,学员有权匿名,对文章有最终解释权:凯哥学堂旨在促进VIP学员互相学习的基础上公开笔记. 邮箱验证码 一般能使用邮箱注 ...

  2. 动态性是Java的特性吗_Java的动态特性有哪些?

    Java的动态特性有两种,一是隐式的:另一种是显示的.隐式的(implicit)方法就是当程式设计师用到new 这个Java 关键字时,会让类别载入器依需求载入您所需要的类别,这种方式使用了隐式的(i ...

  3. java 当中的验证码_Java Web中验证码的实现

    验证码本质上是一张图片,即应该用标签,其中src属性决定了这是一张什么图片,因此可以让src为某一Action,每次点击时,都会更新这个src属性. ① 前台JSP页面 My JSP 'imgcode ...

  4. java如何实现动态时钟_Java实现动态数字时钟

    本文实例为大家分享了Java实现动态数字时钟的具体代码,供大家参考,具体内容如下 构建: Clock继承 JFrame 为运行页面 ClockText 测试类 创建 Clock 对象 运行效果: 具体 ...

  5. java 登录验证码_java实现登录验证码

    本文实例为大家分享了java实现登录验证码的具体代码,供大家参考,具体内容如下 1.ValidateCode.java import java.awt.Color; import java.awt.F ...

  6. java实现图片验证码_JAVA实现图片验证码

    一.创建image工具类 import javax.imageio.ImageIO; import java.awt.*; import java.awt.image.BufferedImage; i ...

  7. java动态打包_java 调用动态库打包sdk

    java连接c++动态库并生成jar包提供给别人调用 1.需要将java通过jni生成头文件,并导入到c++项目并对c++进行jni方法继承 在项目的src目录执行,否则会提示 错误:找不到符号 ja ...

  8. java邮箱发送验证码_java 邮箱发送验证码

    packagecom.*******.util.email;importorg.apache.commons.mail.EmailException;importorg.apache.commons. ...

  9. java动态录音_java实现动态录音,声卡有声音进来就自动录音

    TargetDataLine是声音的输入(麦克风),而SourceDataLine是输出(音响,耳机). 整个过程,请参见下面的程序.(运行后,实时地从麦克风录音,实时输出). import java ...

  10. java 腾讯认证_Java 腾讯验证码平台使用实例

    主要就是官方的这个图: 前端调用接口,得到腾讯发过来的几个数据,前端把这几个数据给后端,后端拿到这些数据后传给腾讯,让其判断是否正常,以及其他属性. 程序运行截图如下: 点击登录后,拖动正确进行跳转, ...

最新文章

  1. spring上下文是什么意思_Java程序员只会CRUD连Spring事务传播机制都不懂?
  2. 怎么获取请求头中的origin信息_委托单位代办汇算清缴时无法获取到我的专项附加扣除信息怎么办?...
  3. 第十七届全国大学生智能汽车竞赛,我们来了
  4. java 智能家居管理系统_智能家居系统手机客户端应用源码
  5. python 测试mysql数据库_Python操作MySQL数据库----继续安装和测试
  6. nginx epoll详解
  7. Amazon Web Service 雲端運算平台攻略 【3】:免費架WordPress部落格的虛擬主機
  8. VirtualBox复制虚拟机
  9. Perl Redis 连接测试脚本,获取list长度
  10. 指针 —— C语言的灵魂,你会了吗
  11. 爱了爱了!0.052 秒打开 100GB 数据,这个开源库火爆了!
  12. MyBatis基础学习知识点3
  13. js如何判断闰年?整除的符号是什么?
  14. 百度android 定位返回161,重拾百度定位之踩坑篇(下)
  15. 【论文翻译-3】Attention U-Net: Learning Where to Look for the Pancreas
  16. 条码的开发使用介绍文档
  17. 编译android sdk方法
  18. STM32启动文件学习总结
  19. 学习python,北京尚学堂,第91课到第120课的个人的总结
  20. 搜道网美女时钟免费申请软件v3.9官方版

热门文章

  1. 联想用u盘重装系统步骤_如何使用U盘重装系统?使用U盘重装系统步骤详解
  2. hfs网络文件服务器如何设置,hfs网络文件服务器的教程
  3. 在Linux中使用7zip/7zz
  4. Visual Assist X破解版安装(vs2010助手)
  5. 报童问题求解最大利润_矩问题和分布式鲁棒优化:由阿里数学竞赛题说开...
  6. 【微信数据迁移】微信数据怎么恢复到另一部手机
  7. mysql数据库学习汇总
  8. xmlspy_XMLSpy是免费的吗? 我说天堂的甘露。
  9. 【爬虫实战】 58同城爬虫-商铺信息采集
  10. 51单片机---IE寄存器,TCON寄存器,TMOD寄存器