当前位置:首页 » 编程语言 » 识别验证码java

识别验证码java

发布时间: 2023-12-20 10:38:27

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

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 = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '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'}; // 字符数量 private static final int SIZE = 4; // 干扰线数量 private static final int LINES = 5; // 宽度 private static final int WIDTH = 80; // 高度 private static final int HEIGHT = 40; // 字体大小 private static final int FONT_SIZE = 30; /** * 生成随机验证码及图片 * 返回的数组中,第1个值是验证码,第2个值是图片 */ public static Object[] createImage() { StringBuffer sb = new StringBuffer(); // 1.创建空白图片 BufferedImage image = new BufferedImage( WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB); // 2.获取图片画笔 Graphics graphic = image.getGraphics(); // 3.设置画笔颜色 graphic.setColor(Color.LIGHT_GRAY); // 4.绘制矩形背景 graphic.fillRect(0, 0, WIDTH, HEIGHT); // 5.画随机字符 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( chars[n] + "", i * WIDTH / SIZE, HEIGHT / 2); // 记录字符 sb.append(chars[n]); } // 6.画干扰线 for (int i = 0; i < LINES; i++) { // 设置随机颜色 graphic.setColor(getRandomColor()); // 随机画线 graphic.drawLine(ran.nextInt(WIDTH), ran.nextInt(HEIGHT), ran.nextInt(WIDTH), ran.nextInt(HEIGHT)); } // 7.返回验证码和图片 return new Object[]{sb.toString(), image}; } /** * 随机取色 */ public static Color getRandomColor() { Random ran = new Random(); Color color = new Color(ran.nextInt(256), ran.nextInt(256), ran.nextInt(256)); 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 登陆时的验证码怎么做

后台写一个生成图片随机的代码,生成图片给前台。切换图片的时候,使用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怎么实现验证码识别

图片验证码是什么
图片验证码,这个大家应该都见过。最普遍的图片验证码就是一张图片上面有4-6个歪歪扭扭的数字字母,图片还有点看不清楚,但是基本可以肉眼识别出上面的数字字母。那为什么要有这个东东呢?

其实验证码的出现为了区分人与机器。对于歪歪妞妞还有点看不清的数字字母图片,由于人脑的特殊构造,是可以完全无障碍识别的,但是想让奇迹识别出这些字母数字,就会出现识别错误。那为什么要区别人与机器呢?假如一个一个系统没有验证码,我知道了你的用户名,并且知道你的登录密码是8位的数字,那我完全可以写个脚本程序穷举出所有的8位数组合,挨个去尝试登录,这个过程对于人来说可能耗时耗力,但是对于程序来说,so easy。所以验证码的出现就会阻止程序进行这样的穷举登录。

随着技术的发展,现在很多的验证码系统都可以通过图像处理、机器学习深度学习等方式进行攻破,图片验证码已经不再安全,即使是非常有名的12306验证码,也已经被利用深度学习达到了很高的识别精度。所以也出现了手机验证码、拖动滑块图片到指定位置的验证码等各种验证码。

④ 怎样用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实现复杂验证码识别

验证码有图片验证码和短信验证码,图片验证码。
图片验证码:http://www.jb51.net/article/42157.htm
短息验证码需要调用接口,得花钱。http://www.yuntongxun.com/activity/sms/anxin.html?ly=-sem-p&qd=cpc&cp=sms&xl=beijingdxcs&kw=10286709

热点内容
手机编写脚本软件 发布:2024-11-30 12:41:02 浏览:872
学php如何 发布:2024-11-30 12:36:48 浏览:857
家庭电脑改网盘服务器 发布:2024-11-30 12:32:13 浏览:105
电脑服务器组装系统 发布:2024-11-30 12:32:11 浏览:998
在线显示wifi密码是什么 发布:2024-11-30 12:30:53 浏览:726
触动精灵安卓脚本 发布:2024-11-30 12:30:47 浏览:80
phpmd5加密代码 发布:2024-11-30 12:29:35 浏览:899
苹果手机锁屏怎么取消密码 发布:2024-11-30 12:28:08 浏览:860
老娘也要当间谍ftp 发布:2024-11-30 12:23:17 浏览:131
家里如何安装文件服务器 发布:2024-11-30 12:15:35 浏览:352