java生成汉字验证码的时候显示不正常? 400 报错
在session看是正确 的,有四个汉字,但是显示在图片上只有第二个字显示,不知道出错在哪里
下面是代码:
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
int width = 166;
int height = 45;
resp.setHeader("Pragma", "No-cache");
resp.setHeader("Cache-Control", "No-cache");
resp.setDateHeader("Expires", 0);
resp.setContentType("image/jpeg");
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_BGR);
Graphics g = image.getGraphics();
Random random = new Random();
Font font = new Font("宋体", Font.ITALIC, 22);
g.fillRect(0, 0, width, height);
g.setFont(font);
String sRand = "";
String ctmp = "";
int itmp = 0;
for(int i = 0; i < 4; i++){
String[] rBase= {"0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f"};
int r1 = random.nextInt(3) + 11;
String str_r1 = rBase[r1];
int r2;
if(r1 == 13){
r2 = random.nextInt(7);
}else{
r2 = random.nextInt(16);
}
String str_r2 = rBase[r2];
int r3 = random.nextInt(6) + 10;
String str_r3 = rBase[r3];
int r4 ;
if(r3 == 10){
r4 = random.nextInt(15) + 1;
}else if(r3 == 15){
r4 = random.nextInt(15);
}else{
r4 = random.nextInt(16);
}
String str_r4 = rBase[r4];
byte[] bytes = new byte[2];
String str_r12 = str_r1 + str_r2;
int tempLow = Integer.parseInt(str_r12,16);
bytes[0] = (byte) tempLow;
String str_r34 = str_r3 + str_r4;
int tempHigh = Integer.parseInt(str_r34, 16);
bytes[1] = (byte) tempHigh;
ctmp = new String(bytes);
sRand += ctmp;
Color color = new Color(20 + random.nextInt(110));
g.setColor(color);
g.drawString(ctmp, width/6*i+23, height/3);
HttpSession session = req.getSession(true);
session.setAttribute("randCheckCode", sRand);
g.dispose();
ImageIO.write(image, "JPEG", resp.getOutputStream());
}
}
下面是显示结果:
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
g.drawString(ctmp, width/6*i+23, 30)######还是不对