java实现随机生成验证码图片
验证码
验证码(CAPTCHA)是“CompletelyAutomatedPublicTuringtesttotellComputersandHumansApart”(全自动区分计算机和人类的图灵测试)的缩写。由于计算机无法解答CAPTCHA的问题,所以回答出问题的用户就可以被认为是人类。
作用
防止恶意破解密码、刷票、论坛灌水、刷页。
有效防止某个黑客对某一个特定注册用户用特定程序暴力破解方式进行不断的登录尝试,实际上使用验证码是现在很多网站通行的方式(比如招商银行的网上个人银行,百度社区),我们利用比较简易的方式实现了这个功能。虽然登录麻烦一点,但是对网友的密码安全来说这个功能还是很有必要,也很重要。但我们还是提醒大家要保护好自己的密码,尽量使用混杂了数字、字母、符号在内的6位以上密码,不要使用诸如1234之类的简单密码或者与用户名相同、类似的密码,免得你的账号被人盗用给自己带来不必要的麻烦。
验证码通常使用一些线条和一些不规则的字符组成,主要作用是为了防止一些黑客把密码数据化盗取。
分类
现在常见的验证码主要有
- gif验证码
- 手机短信验证码
- 手机语音验证码
- 视频验证码
实例
这里只是用java生出一个验证码的图片,并没有在在网页的操作
packagecom.xn;
importjavax.imageio.ImageIO;
importjava.awt.*;
importjava.awt.image.BufferedImage;
importjava.io.FileOutputStream;
importjava.io.IOException;
importjava.io.OutputStream;
importjava.util.Date;
importjava.util.Random;
/**
*验证码生成工具类
*
*@leo
*/
publicclassValidateCode{
//图片的宽度。
privateintwidth=160;
//图片的高度。
privateintheight=40;
//验证码字符个数
privateintcodeCount=5;
//验证码干扰线数
privateintlineCount=150;
//验证码
privateStringcode=null;
//验证码图片Buffer
privateBufferedImagebuffImg=null;
//验证码范围,去掉0(数字)和O(拼音)容易混淆的(小写的1和L也可以去掉,大写不用了)
privatechar[]codeSequence={'A','B','C','D','E','F','G','H','I','J',
'K','L','M','N','P','Q','R','S','T','U','V','W',
'X','Y','Z','1','2','3','4','5','6','7','8','9'};
/**
*默认构造函数,设置默认参数
*/
publicValidateCode(){
this.createCode();
}
/**
*@paramwidth图片宽
*@paramheight图片高
*/
publicValidateCode(intwidth,intheight){
this.width=width;
this.height=height;
this.createCode();
}
/**
*@paramwidth图片宽
*@paramheight图片高
*@paramcodeCount字符个数
*@paramlineCount干扰线条数
*/
publicValidateCode(intwidth,intheight,intcodeCount,intlineCount){
this.width=width;
this.height=height;
this.codeCount=codeCount;
this.lineCount=lineCount;
this.createCode();
}
publicvoidcreateCode(){
intx=0,fontHeight=0,codeY=0;
intred=0,green=0,blue=0;
x=width/(codeCount+2);//每个字符的宽度(左右各空出一个字符)
fontHeight=height-2;//字体的高度
codeY=height-4;
//图像buffer
buffImg=newBufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
Graphics2Dg=buffImg.createGraphics();
/*//将图像背景填充为白色
g.setColor(Color.WHITE);
g.fillRect(0,0,width,height);*/
//增加下面代码使得背景透明
buffImg=g.getDeviceConfiguration().createCompatibleImage(width,height,Transparency.TRANSLUCENT);
g.dispose();
g=buffImg.createGraphics();
//背景透明代码结束
//画图BasicStroke是JDK中提供的一个基本的画笔类,我们对他设置画笔的粗细,就可以在drawPanel上任意画出自己想要的图形了。
g.setColor(newColor(255,0,0));
g.setStroke(newBasicStroke(1f));
g.fillRect(128,128,width,height);
//生成随机数
Randomrandom=newRandom();
//设置字体类型、字体大小、字体样式
Fontfont=newFont("微软雅黑",Font.PLAIN,fontHeight);
g.setFont(font);
for(inti=0;i"+path);
vCode.write(path);
}catch(IOExceptione){
e.printStackTrace();
}
}
}
测试:
更多关于验证码的文章请点击查看:《java验证码》
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。