导航:首页 > 编程语言 > java登陆验证码

java登陆验证码

发布时间:2025-06-11 19:20:56

㈠ 用java怎么制作验证码

原理:

1.随机生成4个数字 用到了Random类
2.对这4个数字设置字体格式 用 setFont方法
3.改变字体颜色用setColor 然后随机生成颜色

代码如下
package s1;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Random;

import javax.imageio.ImageIO;
import javax.jms.Session;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class GetImage extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

this.doPost(request, response);
}

public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 发送图片不能够添加这2行代码
// response.setContentType("text/html;charset=UTF-8");
// request.setCharacterEncoding("UTF-8");

int width=100;
int height=50;
//获得一张图片
BufferedImage image=new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);

Graphics g=image.getGraphics();
g.setColor(Color.WHITE);
g.fillRect(1, 1, width-2, height-2);
g.setFont(new Font("宋体",Font.BOLD,30));
Random random=new Random();

/虚枯兄/ 填充的字符串
String str="";

//缓存生成的验证码败橘
StringBuffer stringbuffer=new StringBuffer();

//随机生成验证码的颜差袭色和字符
for(int i=0;i<4;i++)
{ //设置随机颜色
g.setColor(new Color(random.nextInt(256), random.nextInt(256), random.nextInt(256)));

int index=random.nextInt(62);//这里的62就是从填充字符段中随意选取一个位置
String str1=str.substring(index,index+1);
g.drawString(str1, 20*i, 30);//x,y数值设置太小会显示不出来
stringbuffer.append(str1);
}

//将生成的验证码存到服务器
request.getSession().setAttribute("checkcode", stringbuffer.toString());//key和value

//将图片发送给浏览器
ImageIO.write(image, "jpg", response.getOutputStream());

}

}

用户登录界面代码
package s1;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class Login extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

}

public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

response.setContentType("text/html;charset=UTF-8");// 设置服务器发送给浏览器的编码方式
request.setCharacterEncoding("UTF-8"); // 客户端向服务器提交的数据的解码方式
// 获得用户提交的数据
String checkcode = request.getParameter("checkcode");
System.out.println(checkcode);

// 判断输入的验证码是不是符合
HttpSession session = request.getSession();// session是存放数据的地方
String str = (String) session.getAttribute("checkcode");

if (str != null) {
if (checkcode.compareToIgnoreCase(str) == 0) // 验证码忽略大小写
response.getWriter().println("验证码输入正确");

else
response.getWriter().println("验证码输入错误");
}

else response.getWriter().println("验证码失效");

// 使用完的验证码信息要删除,返回原页面再输一次,验证码就失效了
session.removeAttribute("checkcode");

}

}

㈡ 怎样用java实现验证码

现在许多系统的注册 登录或者发布信息模块都添加的随机验证码功能 就是为了避免自动注册程序或者自动发布程序的使用

验证码实际上就是随机选择一些字符以图片的形式展现在页面上 如果进行提交操作的同时需要将图片上的字符同时提交 如果提交的字符与服务器session保存的不同 则认为提交基数信息无效 为了避免自动程序分析解析图片 通常会在图片上随机生成一些干扰线或者将字符进行扭曲 增加自动识别验证码的难度

在这里 我们使用java实现验证码

<%@ page contentType= image/jpeg import= java awt * java awt image * java util * javax imageio * %>

<%!

Color getRandColor(int fc int bc){//给定范围获得随机颜色

Random random = new Random();

if(fc> ) fc= ;

租锋做if(bc> ) 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);

}

%>

<%

//设置页面不缓存

response setHeader( Pragma No cache );

弊衡response setHeader( Cache Control no cache );

response setDateHeader( Expires );

// 在内存中创建图象

int width= height= ;

BufferedImage image = new BufferedImage(width height BufferedImage TYPE_INT_RGB);

// 获取图形上下文

Graphics g = image getGraphics();

//生成随机类

Random random = new Random();

// 设定背景色

g setColor(getRandColor( ));

g fillRect( width height);

//设定字体

g setFont(new Font( Times New Roman Font PLAIN ));

// 随机产生 条干扰线 使图象中的认证码不易被其它程序探测到

g setColor(getRandColor( ));

for (int i= ;i< ;i++)

{

int x = random nextInt(width);

int y = random nextInt(height);

int xl = random nextInt( );

int yl = random nextInt( );

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

}

// 取随机产生的认证码( 位数字)

String codeList = ;

String sRand= ;

for (int i= ;i< ;i++){

int a=random nextInt(codeList length() );

String rand=codeList substring(a a+ );

sRand+=rand;

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

g setColor(new Color( +random nextInt( ) +random nextInt( ) +random nextInt( )));//调用函数出来的颜色相同 可能是因为种子太接近 所以只能直接生成

g drawString(rand *i+ );

}

// 将认证码存入SESSION

session setAttribute( rand sRand);

// 图象生效

g dispose();

// 输出图象到页面

ImageIO write(image JPEG response getOutputStream());

out clear();

out = pageContext pushBody();

lishixin/Article/program/Java/hx/201311/25536

㈢ java 登陆时的验证码怎么做

后台写一个生成图片随机的代码,生成图片给前台。切换图片的时候,使用ajax获取图片数据就行。
附上生成图片的代码
public class ValidateCode {

private int width=180;
private int height=60;
private int codeCount = 4;
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',
'x', 'y', 'z', 'o', '1', '2', '3', '4', '5', '6', '7', '8', '9' };
private int fontHeight;

public ValidateCode() {
x = width / (codeCount + 2);
fontHeight = height - 2;
codeY = height - 4;
CreateCode();
}

public void CreateCode(){

// 定义图像buffer
BufferedImage buffImg = new BufferedImage(width, height,BufferedImage.TYPE_INT_RGB);
Graphics2D g = buffImg.createGraphics();
// 创建一个随机数生成器类
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++) {
// 得到随机产生的验证码数字。
String strRand = String.valueOf(codeSequence[random.nextInt(62)]);
// 产生随机的颜色分量来构造颜色值,这样输出的每位数字的颜色值都将不同。
red = random.nextInt(255);
green = random.nextInt(255);
blue = random.nextInt(255);

// 用随机产生的颜色将验证码绘制到图像中。
g.setColor(new Color(red, green, blue));
g.drawString(strRand, (i ) * x+20, codeY);

// 将产生的四个随机数组合在一起。
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登陆验证码相关的资料

热点内容
八卦汇总421页pdf 浏览:286
android应用自动升级 浏览:747
远程屏幕监控源码 浏览:569
云服务器的ip怎么查询 浏览:155
大学c语言搜题app在哪里下载 浏览:109
pdf文档被保护 浏览:345
有没有电脑公司网站源码下载 浏览:230
智能电视哪个app看电影好用 浏览:224
微信页面源码下载 浏览:957
怎么看5代喷头加密 浏览:359
linux查找文件并删除文件 浏览:872
单片机里的编程软件 浏览:164
钻石投票网站源码 浏览:973
cidrphp 浏览:882
android测试用例文档 浏览:821
单片机素数 浏览:838
怎么在桌面上发送文件夹 浏览:761
海外贷款源码 浏览:717
北航单片机实验 浏览:799
私有云服务器在哪里 浏览:939