网站首页 > 文章中心 > 其它

图片验证码java代码

作者:小编 更新时间:2023-09-22 10:39:01 浏览量:270人看过

怎么用Java代码实现一个验证码,求具体实现方法

package?util;

图片验证码java代码-图1

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?=?{?

图片验证码java代码-图2

'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();

JAVA识别图片验证码

package com.he;

import javax.servlet.*;

import javax.servlet.http.*;

import java.io.*;

import java.util.*;

import java.awt.*;

import java.awt.image.*;

import javax.imageio.*;

public class CodeFact

extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response) throws

ServletException, IOException {

//设置页面不缓存

response.setHeader("Pragma", "No-cache");

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

response.setDateHeader("Expires", 0);

// 在内存中创建图象

BufferedImage image = new BufferedImage(width, height,

BufferedImage.TYPE_INT_RGB);

// 获取图形上下文

Graphics g = image.getGraphics();

//生成随机类

Random random = new Random();

// 设定背景色

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

//设定字体

//画边框

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

int x = random.nextInt(width);

int y = random.nextInt(height);

g.drawLine(x, y, x + xl, y + yl);

String sRand = "";

String rand = String.valueOf(random.nextInt(10));

sRand += rand;

// 将认证码显示到图象中

// 将认证码存入SESSION

HttpSession session = request.getSession();

session.setAttribute("rand", sRand);

// 图象生效

g.dispose();

// 输出图象到页面

ImageIO.write(image, "JPEG", response.getOutputStream());

public void doPost(HttpServletRequest request, HttpServletResponse response) throws

doGet(request, response);

//给定范围获得随机颜色

private Color getRandColor(int fc, int bc) {

int r = fc + random.nextInt(bc - fc);

int g = fc + random.nextInt(bc - fc);

int b = fc + random.nextInt(bc - fc);

return new Color(r, g, b);

你试试!!

如何用Java代码段生成四位数字加字母的验证码?

下面简单的介绍他们的功能和用途,执行效率等.每个都有各自的优缺点看你是做甚什么方面的研究开发用..net,是网站编程,现在很多都用这个,但是这个语言编程都有统一思路,很好掌握.窒息那个效率不是很高;php 支持跨平台,很容易学会,执行的效率很高;asp是ASP.net的前身,它比较稳定,比.net要弱一点.但是比.net好学.jsp 是网页编程,这个学习大约一周就能搞定,不过这个得多实践,不然的话,时间长了,就容易忘记.

求java语言随机生成图片验证码的程序代码,有详细注释最好,本人初学者,谢谢各位的帮忙!!!

楼上正解

*?图片验证码

*?

public?class?CheckCode?extends?HttpServlet?{

*?验证图片宽

*?验证图片高度

public?void?doGet(HttpServletRequest?request,?HttpServletResponse?response)

throws?ServletException,?IOException?{

图片验证码java代码-图3

//?获得图片

BufferedImage?image?=?new?BufferedImage(WIDTH,?HEIGHT,

//?获取画笔

Graphics?g?=?image.getGraphics();

//?设置边框

setBounds(g);

//?//?设置背景

//?setBackGround(g);

//?干扰线

drawRandomLine(g);

//?验证码

//?发送给页面

response.setContentType("image/jpeg");

response.setDateHeader("expries",?-1);

response.setHeader("cache-control",?"no-cache");

response.setHeader("progma",?"no-cache");

ImageIO.write(image,?"jpg",?response.getOutputStream());

*?边框

private?void?setBounds(Graphics?g)?{

g.setColor(Color.BLUE);

g.fillRect(0,?0,?WIDTH,?HEIGHT);

g.setColor(Color.WHITE);

*?背景

//?private?void?setBackGround(Graphics?g)?{

//

//?g.setColor(Color.WHITE);

//?}

*?干扰线

private?void?drawRandomLine(Graphics?g)?{

g.setColor(Color.GREEN);

int?x1,?y1;

Random?r?=?new?Random();

//?起始xy

x1?=?r.nextInt(WIDTH);

y1?=?r.nextInt(HEIGHT);

//?结束xy

*?验证码

g.setColor(Color.RED);

StringBuilder?sb?=?new?StringBuilder();

char?ch?=?'\u0000';

int?degree?=?0;

ch?=?base.charAt(r.nextInt(base.length()));

//?取消旋转

sb.append(ch);

request.getSession().setAttribute("checkCode",?sb.toString().toLowerCase());

public?void?doPost(HttpServletRequest?request,?HttpServletResponse?response)

doGet(request,?response);

希望能帮助你

Java如何实现验证码验证功能

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)

//?获得?当前请求?对应的?会话对象

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 登陆时的验证码怎么做?

后台写一个生成图片随机的代码,生成图片给前台.切换图片的时候,使用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);

// 创建一个随机数生成器类

// 将图像填充为白色

// 创建字体,字体的大小应该根据图片的高度来定.

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;

以上就是土嘎嘎小编为大家整理的图片验证码java代码相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!

版权声明:倡导尊重与保护知识产权。未经许可,任何人不得复制、转载、或以其他方式使用本站《原创》内容,违者将追究其法律责任。本站文章内容,部分图片来源于网络,如有侵权,请联系我们修改或者删除处理。

编辑推荐

热门文章