/**
* @ClassName: ValidateCodeHelper
* @Description: 关于java图形验证码的工具类
* 这是一个验证码工具类,直接复制粘贴即可用
* @author 没有水的鱼
* @date 2016年10月10日10:43:48
* @version 1.0
*/
public class ValidateCodeHelper{
/*
* 随机数(去除0、o这种相似字符)
*/
private static Random random = new Random();
/*
* 随机字符字典
*/
private static final char[] CHARS = { '2', '3', '4', '5', '6', '7', '8',
'9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'J', 'K', 'L', 'M',
'N', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z' };
/*
* 获取4位随机数(修改循环次数,即可修改生成的随机数位数)
*/
public static String getRandomString()
{
StringBuffer buffer = new StringBuffer();
for(int i = 0; i < 4; i++)
{
buffer.append(CHARS[random.nextInt(CHARS.length)]);
}
return buffer.toString();
}
/*
* 获取随机数颜色
*/
private static Color getRandomColor()
{
return new Color(random.nextInt(255),random.nextInt(255),
random.nextInt(255));
}
/*
* 返回某颜色的反色
*/
private static Color getReverseColor(Color c)
{
return new Color(255 - c.getRed(), 255 - c.getGreen(),
255 - c.getBlue());
}
/**
* @功能描述 获取验证码功能
* @开发人员 没有水的鱼
* @方法参数 需要生成的随机数
* @开发时间 2016年9月13日11:25:36
* @修改时间 2016年9月13日11:30:39
* @返回值 CommonResult
*/
public byte[] generateVerificationCode(String randomString)throws Exception {
byte[] be = null;
int width = 90;
int height = 30;
//以下两行Color是随机颜色的,生成的验证码不是美观。
// Color color = getRandomColor();
// Color reverse = getReverseColor(color);
//这里我写了个固定背景颜色的Color,个人感觉还可以.
Color color = new Color(255,255,255);
Color reverse = new Color(42,145,0);
BufferedImage bi = new BufferedImage(width, height,
BufferedImage.TYPE_INT_RGB);
Graphics2D g = bi.createGraphics();
//消除线条锯齿
g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
//设置字体样式
g.setFont(new Font(Font.DIALOG, Font.PLAIN, 24));
//设置字体颜色
g.setColor(color);
//设置边框宽度
g.fillRect(0, 0, width, height);
//设置背景色
g.setColor(reverse);
//设置验证码在图形当中的位置高低
g.drawString(randomString, 15, 23);
//设置干扰线
for (int i = 0; i < 8; i++)
{
g.setColor(new Color(random.nextInt(256), random.nextInt(256), random.nextInt(256)));
//画线
g.drawLine(random.nextInt(70), random.nextInt(40), random.nextInt(100), random.nextInt(30));
}
g.dispose();
ByteArrayOutputStream bs = new ByteArrayOutputStream();
ImageOutputStream imOut;
imOut = ImageIO.createImageOutputStream(bs);
ImageIO.write(bi, "jpg",imOut);
InputStream inpitstram= new ByteArrayInputStream(bs.toByteArray());
//由于项目特殊性需要故将InputStream 转换成了byte[]的格式。
be = UsercenterHelper.input2byte(inpitstram);
return be;
}
}
转载请注明出处。