Java实现Web页面前数字字母验证码实现
最近公司做项目开发中用到了验证码实现功能,将实现代码分享出来,
前段页面实现代码:
为了表达清晰,样式部分代码去掉了,大家根据自己的需求,自己添加样式。
页面JS代码:触发变动验证码改变的JS
后台 Controller处理:
package com.njcc.pay.controller.login;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.p_w_picpath.BufferedImage;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Random;
import javax.p_w_picpathio.ImageIO;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.lang3.math.NumberUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import com.alibaba.dubbo.common.utils.StringUtils;
/**
* 验证马 Controller
*
* @author Administrator
*
*/
@Controller
public class ValidateCodeController {
@SuppressWarnings("unused")
private static final Log LOG = LogFactory.getLog(ValidateCodeController.class);
public static final String VALIDATE_CODE = "validateCode";
private int w = 70;
private int h = 23;
/**
* @throws Exception
* 函数功能说明 : 进入后台登陆页面.
*
* @参数: @return
* @return String
* @throws
*/
@RequestMapping(value = "/validateCode")
public void validateCode(HttpServletRequest request,
HttpServletResponse response) throws Exception {
createImage(request,response);
}
private void createImage(HttpServletRequest request,HttpServletResponse response) throws IOException {
response.setHeader("Pragma", "no-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0);
response.setContentType("p_w_picpath/jpeg");
String width = request.getParameter("width");
String height = request.getParameter("height");
if (StringUtils.isNumeric(width) && StringUtils.isNumeric(height)) {
w = NumberUtils.toInt(width);
h = NumberUtils.toInt(height);
}
BufferedImage p_w_picpath = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);
Graphics g = p_w_picpath.getGraphics();
/*
* 生成背景
*/
createBackground(g);
/*
* 生成字符
*/
String s = createCharacter(g);
request.getSession().setAttribute(VALIDATE_CODE, s);
g.dispose();
OutputStream out = response.getOutputStream();
ImageIO.write(p_w_picpath, "JPEG", out);
out.close();
}
/**
* 生成颜色
* @param fc
* @param bc
* @return
*/
private Color getRandColor(int fc,int bc) {
int f = fc;
int b = bc;
Random random=new Random();
if(f>255) {
f=255;
}
if(b>255) {
b=255;
}郑州妇科医院http://jbk.39.net/yiyuanzaixian/sysdfkyy/
return new Color(f+random.nextInt(b-f),f+random.nextInt(b-f),f+random.nextInt(b-f));
}
/**
* 生成背景
* @param g
*/
private void createBackground(Graphics g) {
// 填充背景
g.setColor(getRandColor(220,250));
g.fillRect(0, 0, w, h);
// 加入干扰线条
for (int i = 0; i < 8; i++) {
g.setColor(getRandColor(40,150));
Random random = new Random();
int x = random.nextInt(w);
int y = random.nextInt(h);
int x1 = random.nextInt(w);
int y1 = random.nextInt(h);
g.drawLine(x, y, x1, y1);
}
}
/**
* 生成字符
* @param g
* @return
*/
private String createCharacter(Graphics g) {
char[] codeSeq = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'J',
'K', 'M', 'N', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W',
'X', 'Y', 'Z', '2', '3', '4', '5', '6', '7', '8', '9' };
String[] fontTypes = {"Arial","Arial Black","AvantGarde Bk BT","Calibri"};
Random random = new Random();
StringBuilder s = new StringBuilder();
for (int i = 0; i < 4; i++) {
String r = String.valueOf(codeSeq[random.nextInt(codeSeq.length)]);//random.nextInt(10));
g.setColor(new Color(50 + random.nextInt(100), 50 + random.nextInt(100), 50 + random.nextInt(100)));
g.setFont(new Font(fontTypes[random.nextInt(fontTypes.length)],Font.BOLD,26));
g.drawString(r, 15 * i + 5, 19 + random.nextInt(8));
// g.drawString(r, i*w/4, h-5);
s.append(r);
}
return s.toString();
}
}
Java实现Web页面前数字字母验证码实现的更多相关文章
- Servlet实现数字字母验证码图片(二)
Servlet实现数字字母验证码图片(二): 生成验证码图片主要用到了一个BufferedImage类,如下:
- Java selenium web页面的滚动条操作
摘录自:http://blog.csdn.net/iceryan/article/details/8162703 //移动到元素element对象的"顶端"与当前窗口的" ...
- java图形验证码生成工具类及web页面校验验证码
最近做验证码,参考网上案例,发现有不少问题,特意进行了修改和完善. 验证码生成器: import javax.imageio.ImageIO; import java.awt.*; import ja ...
- web页面 验证码 生成
web页面 验证码 生成 kaptcha 是一个非常实用的验证码生成工具.有了它,你可以生成各种样式的验证码,因为它是可配置的.kaptcha工作的原理是调用 com.google.code.kapt ...
- JAVA整合kaptcha生成验证码 (字母验证码和算术验证码)
引入maven <!--图片验证码--> <dependency> <groupId>com.github.penggle</groupId> < ...
- paip.powerdesign cdm pdm文件 代码生成器 java web 页面 实现
paip.powerdesign cdm pdm文件 代码生成器 java web 页面 实现 准备从pd cdm生成java web 页面...但是,ms无直接地生成软件.... 只好自己解析cdm ...
- Java用webSocket实现tomcat的日志实时输出到web页面
原文:http://blog.csdn.net/smile326/article/details/52218264 1.场景需求 后台攻城狮和前端攻城狮一起开发时,经常受到前端攻城狮的骚扰,动不动就来 ...
- Java随机生成定长纯数字或数字字母混合数
(转)Java随机生成定长纯数字或数字字母混合数 运行效果图: 具体实现代码
- java验证,”支持6-20个字母、数字、下划线或减号,以字母开头“这个的正则表达式怎么写?
转自:https://yq.aliyun.com/wenzhang/show_96854 问题描述 java验证,”支持6-20个字母.数字.下划线或减号,以字母开头“这个的正则表达式怎么写? 验证” ...
随机推荐
- 理解Objective-C Runtime(四)Method Swizzling
Objective-C对象收到消息之后,究竟会调用何种方法需要在运行期间才能解析出来.那你也许会问:与给定的选择子名称相应的方法是不是也可以在runtime改变呢?没错,就是这样.若能善用此特性,则可 ...
- WC2017游记
Day0 到杭州之后出了点锅换了辆车,等了好久才开= =到宿舍发现路由器就在房门口,稳啊,过了一会儿就连不上了= =而且只有门口那个连不上,可以连上楼下的= =之后干了啥也忘了…… Day1 上午直接 ...
- 【HDU 3613】Best Reward
[题目链接] 点击打开链接 [算法] 正反两遍EXKMP,即可 [代码] #include<bits/stdc++.h> using namespace std; #define MAXC ...
- JAVA RTTI
基础类可接收我们发给派生类的任何消息,因为两者拥有完全一致的接口.我们要做的全部事情就是从派生上溯造型,而且永远不需要回过头来检查对象的准确类型是什么.所有细节都已通过多态性获得了完美的控制. 但经过 ...
- FTP两种工作模式:主动模式(Active FTP)和被动模式
在主动模式下,FTP客户端随机开启一个大于1024的端口N向服务器的21号端口发起连接,然后开放N+1号端口进行监听,并向服务器发出PORT N+1命令.服务器接收到命令后,会用其本地的FTP数据端口 ...
- E20170417-sl
recursive adj.递归的 strategy n.战略
- Android Studio新建类头部注释和添加函数注释模板及快捷键
一,Android Studio新建类头部注释 是不是有时候看到这个很心烦 其实Studio中有设置修改这些注释模板的信息的功能 其实很简单,只需要两步: 1.打开Setting设置面板,找到File ...
- hdoj1028;他们说这题叫dp...
#include<cstdio> #include<string> #include<iostream> #include<vector> #inclu ...
- NOIp 2014 解方程 【数学/秦九韶算法/大数取膜】By cellur925
题目传送门 题意:求高次方程的解及其个数.其中 1° 我们知道,高次方程是没有求根公式的.但是利用逆向思维,我们可以进行“试根法”,因为题目中给出了所求根的范围.但是多项式系数过于吓人,达到了sxbk ...
- 递归(Recursion)
递归是一种非常常用的算法,分为“递”和“归”两个步骤.满足递归算法有三个条件:1.一个问题,可以分解为子问题:2.该问题,与分解后的子问题,解决思路一致:3.存在终止条件.案例演示:假设有n个台阶,每 ...