package?util;
import?java.awt.Color;
import?java.awt.Font;
import?java.awt.Graphics;
import?java.awt.image.BufferedImage;
import?java.io.FileOutputStream;
import?java.io.IOException;
import?java.io.OutputStream;
import?java.util.Random;
import?javax.imageio.ImageIO;
public?final?class?ImageUtil?{
//?验证码字符集
private?static?final?char[]?chars?=?{?
'A',?'B',?'C',?'D',?'E',?'F',?'G',?'H',?'I',?'J',?'K',?'L',?'M',?'N',?
'O',?'P',?'Q',?'R',?'S',?'T',?'U',?'V',?'W',?'X',?'Y',?'Z',?
'a',?'b',?'c',?'d',?'e',?'f',?'g',?'h',?'i',?'j',?'k',?'l',?'m',?'n',?
'o',?'p',?'q',?'r',?'s',?'t',?'u',?'v',?'w',?'x',?'y',?'z'};
//?字符数量
//?干扰线数量
//?宽度
//?高度
//?字体大小
/**
*?生成随机验证码及图片
*/
public?static?Object[]?createImage()?{
StringBuffer?sb?=?new?StringBuffer();
//?1.创建空白图片
BufferedImage?image?=?new?BufferedImage(
WIDTH,?HEIGHT,?BufferedImage.TYPE_INT_RGB);
Graphics?graphic?=?image.getGraphics();
graphic.setColor(Color.LIGHT_GRAY);
graphic.fillRect(0,?0,?WIDTH,?HEIGHT);
Random?ran?=?new?Random();
for?(int?i?=?0;?i?SIZE;?i◆◆)?{
//?取随机字符索引
int?n?=?ran.nextInt(chars.length);
//?设置随机颜色
graphic.setColor(getRandomColor());
//?设置字体大小
graphic.setFont(new?Font(
null,?Font.BOLD?◆?Font.ITALIC,?FONT_SIZE));
//?画字符
graphic.drawString(
//?记录字符
sb.append(chars[n]);
}
for?(int?i?=?0;?i?LINES;?i◆◆)?{
//?随机画线
graphic.drawLine(ran.nextInt(WIDTH),?ran.nextInt(HEIGHT),
ran.nextInt(WIDTH),?ran.nextInt(HEIGHT));
return?new?Object[]{sb.toString(),?image};
*?随机取色
public?static?Color?getRandomColor()?{
return?color;
public?static?void?main(String[]?args)?throws?IOException?{
Object[]?objs?=?createImage();
BufferedImage?image?=?(BufferedImage)?objs[1];
OutputStream?os?=?new?FileOutputStream("d:/1.png");
ImageIO.write(image,?"jpeg",?os);
os.close();
下面简单的介绍他们的功能和用途,执行效率等.每个都有各自的优缺点看你是做甚什么方面的研究开发用..net,是网站编程,现在很多都用这个,但是这个语言编程都有统一思路,很好掌握.窒息那个效率不是很高;php 支持跨平台,很容易学会,执行的效率很高;asp是ASP.net的前身,它比较稳定,比.net要弱一点.但是比.net好学.jsp 是网页编程,这个学习大约一周就能搞定,不过这个得多实践,不然的话,时间长了,就容易忘记.
后台写一个生成图片随机的代码,生成图片给前台.切换图片的时候,使用ajax获取图片数据就行.
附上生成图片的代码
public class ValidateCode {
private int x = 0;
private int codeY;
private String Code;
private BufferedImage buffImg;
static char[] codeSequence = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J',
'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W',
'X', 'Y', 'Z','a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j',
'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w',
private int fontHeight;
public ValidateCode() {
CreateCode();
public void CreateCode(){
// 定义图像buffer
BufferedImage buffImg = new BufferedImage(width, height,BufferedImage.TYPE_INT_RGB);
// 创建一个随机数生成器类
Random random = new Random();
// 将图像填充为白色
g.setColor(Color.WHITE);
g.fillRect(0, 0, width, height);
// 创建字体,字体的大小应该根据图片的高度来定.
Font font = new Font("Fixedsys", Font.PLAIN, fontHeight);
// 设置字体.
g.setFont(font);
// 画边框.
g.setColor(Color.BLACK);
g.drawRect(0, 0, width - 1, height - 1);
// randomCode用于保存随机产生的验证码,以便用户登录后进行验证.
StringBuffer randomCode = new StringBuffer();
int red = 0, green = 0, blue = 0;
// 随机产生codeCount数字的验证码.
for (int i = 0; i codeCount; i◆◆) {
// 得到随机产生的验证码数字.
// 产生随机的颜色分量来构造颜色值,这样输出的每位数字的颜色值都将不同.
// 用随机产生的颜色将验证码绘制到图像中.
g.setColor(new Color(red, green, blue));
// 将产生的四个随机数组合在一起.
randomCode.append(strRand);
this.Code=randomCode.toString().toUpperCase();
this.buffImg=buffImg;
public String getCode() {
return Code;
public void setCode(String code) {
Code = code;
public BufferedImage getBuffImg() {
return buffImg;
public void setBuffImg(BufferedImage buffImg) {
this.buffImg = buffImg;
①.、创建一个Http的模拟请求工具类,然后写一个POST方法或者GET方法
验证码是指网页的验证码还是手机的验证码
下面是随机生成四位数的相关代码
public?class?RandomTest?{
public?static?void?main(String[]?args)?{
System.out.println("Math.random得到小数");
System.out.println(Math.round(Math.random()?*?10000));
System.out.println("Random");
System.out.println("字符串前面补0的话就这样String.format");
Java如何实现验证码验证功能呢?日常生活中,验证码随处可见,他可以在一定程度上保护账号安全,那么他是怎么实现的呢?
Java实现验证码验证功能其实非常简单:用到了一个Graphics类在画板上绘制字母,随机选取一定数量的字母随机生成,然后在画板上随机生成几条干扰线.
首先,写一个验证码生成帮助类,用来绘制随机字母:
public?final?class?GraphicHelper?{
*?以字符串形式返回生成的验证码,同时输出一个图片
*
*??图片的宽度
*??图片的高度
*??图片的类型
*??图片的输出流(图片将输出到这个流中)
public?static?String?create(final?int?width,?final?int?height,?final?String?imgType,?OutputStream?output)?{
Random?random?=?new?Random();
BufferedImage?image?=?new?BufferedImage(width,?height,?BufferedImage.TYPE_INT_RGB);
graphic.fillRect(0,?0,?width,?height);
Color[]?colors?=?new?Color[]?{?Color.BLUE,?Color.GRAY,?Color.GREEN,?Color.RED,?Color.BLACK,?Color.ORANGE,
Color.CYAN?};
graphic.setColor(colors[random.nextInt(colors.length)]);
final?int?x?=?random.nextInt(width);
final?int?y?=?random.nextInt(height);
final?int?signA?=?random.nextBoolean()?1?:?-1;
final?int?signB?=?random.nextBoolean()?1?:?-1;
graphic.drawLine(x,?y,?x?◆?w?*?signA,?y?◆?h?*?signB);
//?在?"画板"上绘制字母
String?s?=?String.valueOf((char)?temp);
sb.append(s);
graphic.dispose();
try?{
ImageIO.write(image,?imgType,?output);
}?catch?(IOException?e)?{
e.printStackTrace();
return?sb.toString();
}?
接着,创建一个servlet,用来固定图片大小,以及处理验证码的使用场景,以及捕获页面生成的验证码(捕获到的二维码与用户输入的验证码一致才能通过).
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;
@WebServlet(urlPatterns?=?"/verify/regist.do"?)
public?class?VerifyCodeServlet?extends?HttpServlet?{
@Override
protected?void?service(HttpServletRequest?request,?HttpServletResponse?response)
throws?ServletException,?IOException?{
//?获得?当前请求?对应的?会话对象
HttpSession?session?=?request.getSession();
//?从请求中获得?URI?(?统一资源标识符?)
String?uri?=?request.getRequestURI();
System.out.println("hello?:?"?◆?uri);
final?String?imgType?=?"jpeg";?//?指定图片格式?(不是指MIME类型)
//?(字节流)
//?创建验证码图片并返回图片上的字符串
String?code?=?GraphicHelper.create(width,?height,?imgType,?output);
System.out.println("验证码内容:?"?◆?code);
//?建立?uri?和?相应的?验证码?的关联?(?存储到当前会话对象的属性中?)
session.setAttribute(uri,?code);
System.out.println(session.getAttribute(uri));
接着写一个HTML注册页面用来检验一下:
html
head
title注册/title
link?rel="stylesheet"?href="styles/general.css"
link?rel="stylesheet"?href="styles/cell.css"
link?rel="stylesheet"?href="styles/form.css"
script?type="text/javascript"?src="js/ref.js"/script
style?type="text/css"?
.logo-container?{
.logo-container?img?{
width:?100px?;
.message-container?{
.link-container?{
.link-container?a?{
text-decoration:?none?;
/style
/head
body
form?action="/wendao/regist.do"?method="post"
span?class="cell-1"
i?class="fa?fa-user"/i
/span
span?class="cell-11"?style="text-align:?left;"
input?type="text"?name="username"?placeholder="请输入用户名"
i?class="fa?fa-key"/i
input?type="password"?name="password"?placeholder="请输入密码"
i?class="fa?fa-keyboard-o"/i
input?type="password"?name="confirm"?placeholder="请确认密码"
input?type="text"?name="verifyCode"?placeholder="请输入验证码"
img?src="/demo/verify/regist.do"?onclick="myRefersh(this)"
input?type="reset"?value="重置"
input?type="submit"?value="注册"
/form
/body
/html
效果如下图:
在控制台接收到的图片中验证码的变化如下:
在img
src="/demo/verify/regist.do"中,添加一个问号和一串后缀数字,当刷新时让后缀数字不断改变,那么形成的验证码也会不断变化,我们可以采用的一种办法是后缀数字用date代替,date获取本机时间,时间是随时变的,这样就保证了刷新验证码可以随时变化.
代码如下:
function?myRefersh(?e?)?{
const?source?=?e.src?;?//?获得原来的?src?中的内容
//console.log(?"source?:?"?◆?source?)?;
var?index?=?source.indexOf(?"?"?)?;?//?从?source?中寻找?第一次出现的位置?(如果不存在则返回?-1?)
//console.log(?"index?:?"?◆?index?)?;
if(?index?-1?)?{?//?如果找到了?就进入内部
var?s?=?source.substring(?0?,?index?)?;?//?从?source?中截取?index?之前的内容?(?index?以及?index?之后的内容都被舍弃?)
//console.log(?"s?:?"?◆?s?)?;
var?date?=?new?Date();?//?创建一个?Date?对象的?一个?实例
var?time?=?date.getTime()?;?//?从?新创建的?Date?对象的实例中获得该时间对应毫秒值
e.src?=?s?◆?"?time="?◆?time?;?//?将?加了?尾巴?的?地址?重新放入到?src?上
//console.log(?e.src?)?;
}?else?{
var?date?=?new?Date();
e.src?=?source?◆?"?time="?◆?date.getTime();
如回答不详细可追问
以上就是土嘎嘎小编为大家整理的验证码代码java相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!