java生成验证码

来源:互联网 发布:网络用语开车的意思 编辑:程序博客网 时间:2024/06/06 17:07

前端调用:

<img src="${CTX }/captcha" >


后台代码:

private intw= 70;private inth= 26;/** * 生成验证码 */@RequestMappingpublic void captcha(String width, String height, HttpServletResponse response, Model model){OutputStream out = null;try{response.setHeader("Pragma", "no-cache");response.setHeader("Cache-Control", "no-cache");response.setDateHeader("Expires", 0);response.setContentType("image/jpeg");if (StringUtils.isNumeric(width) && StringUtils.isNumeric(height)){w = NumberUtils.toInt(width);h = NumberUtils.toInt(height);}BufferedImage image = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);Graphics g = image.getGraphics();g.setColor(getRandColor(220, 250));// 生成背景g.fillRect(0, 0, w, h);for (int i = 0; i < 8; i++) // 加入干扰线条{g.setColor(getRandColor(40, 150));Random random = new Random();int x = random.nextInt(w);int y = random.nextInt(h);int x1 = random.nextInt(w);int y1 = random.nextInt(h);g.drawLine(x, y, x1, y1);}String s = createCharacter(g);// 生成字符SessionUtils.put(Constants.SESSION_KEY_CAPTCHA, s);g.dispose();out = response.getOutputStream();ImageIO.write(image, "JPEG", out);out.close();}catch (Exception e){logger.error("Write Captcha Error", e);}finally{IOUtils.closeQuietly(out);}}private Color getRandColor(int fc, int bc){int f = fc;int b = bc;Random random = new Random();if (f > 255){f = 255;}if (b > 255){b = 255;}return new Color(f + random.nextInt(b - f), f + random.nextInt(b - f), f + random.nextInt(b - f));}private String createCharacter(Graphics g){char[] codeSeq ={ 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'J', 'K', 'L', 'M', 'N', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '2', '3', '4', '5', '6', '7', '8', '9' };                //字体:宋体, 新宋体, 黑体, 楷体, 隶书String[] fontTypes ={ "\u5b8b\u4f53", "\u65b0\u5b8b\u4f53", "\u9ed1\u4f53", "\u6977\u4f53", "\u96b6\u4e66" };Random random = new Random();StringBuilder s = new StringBuilder();for (int i = 0; i < 4; i++){String r = String.valueOf(codeSeq[random.nextInt(codeSeq.length)]);g.setColor(new Color(50 + random.nextInt(100), 50 + random.nextInt(100), 50 + random.nextInt(100)));g.setFont(new Font(fontTypes[random.nextInt(fontTypes.length)], Font.BOLD, 26));g.drawString(r, 15 * i + 5, 19 + random.nextInt(8));s.append(r);}return s.toString();}


0 0
原创粉丝点击