黑马程序员技术交流社区

标题: 有会写验证码的大哥哥大姐姐吗? [打印本页]

作者: 代晃    时间: 2015-7-22 08:27
标题: 有会写验证码的大哥哥大姐姐吗?
想写一个验证码,完全没有思路呀
作者: 嘟嘟嘟嘟嘟    时间: 2015-7-22 09:21
是什么验证码?纯数字的话,用Math.random()获取4个随机数字然后放进字符串就可以了.
数字+字母的话,我没写过,我想应该也是用Math.random()先获取随机的ASCI码,然后转为字符就可以了
作者: as604049322    时间: 2015-7-22 15:50

  1. package com.gaxsz.utils;

  2. import java.awt.BasicStroke;
  3. import java.awt.Color;
  4. import java.awt.Font;
  5. import java.awt.Graphics2D;
  6. import java.awt.image.BufferedImage;
  7. import java.io.IOException;
  8. import java.io.OutputStream;
  9. import java.util.Random;

  10. import javax.imageio.ImageIO;

  11. public class VerifyCode {
  12.         private int w = 90;
  13.         private int h = 35;
  14.         private Random r = new Random();
  15.         // {"宋体", "华文楷体", "黑体", "华文新魏", "华文隶书", "微软雅黑", "楷体_GB2312"}
  16.         private String[] fontNames  = {"宋体", "华文楷体", "黑体", "微软雅黑", "楷体_GB2312"};
  17.         private String codes  = "23456789abcdefghjkmnopqrstuvwxyzABCDEFGHJKMNPQRSTUVWXYZ";
  18.         private Color bgColor  = new Color(255, 255, 255);
  19.         private String text ;
  20.        
  21.         private Color randomColor () {
  22.                 int red = r.nextInt(150);
  23.                 int green = r.nextInt(150);
  24.                 int blue = r.nextInt(150);
  25.                 return new Color(red, green, blue);
  26.         }
  27.        
  28.         private Font randomFont () {
  29.                 int index = r.nextInt(fontNames.length);
  30.                 String fontName = fontNames[index];
  31.                 int style = r.nextInt(4);
  32.                 int size = r.nextInt(5) + 24;
  33.                 return new Font(fontName, style, size);
  34.         }
  35.        
  36.         private void drawLine (BufferedImage image) {
  37.                 int num  = 3;
  38.                 Graphics2D g2 = (Graphics2D)image.getGraphics();
  39.                 for(int i = 0; i < num; i++) {
  40.                         int x1 = r.nextInt(w);
  41.                         int y1 = r.nextInt(h);
  42.                         int x2 = r.nextInt(w);
  43.                         int y2 = r.nextInt(h);
  44.                         g2.setStroke(new BasicStroke(1.5F));
  45.                         g2.setColor(Color.BLUE);
  46.                         g2.drawLine(x1, y1, x2, y2);
  47.                 }
  48.         }
  49.        
  50.         private char randomChar () {
  51.                 int index = r.nextInt(codes.length());
  52.                 return codes.charAt(index);
  53.         }
  54.        
  55.         private BufferedImage createImage () {
  56.                 BufferedImage image = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);
  57.                 Graphics2D g2 = (Graphics2D)image.getGraphics();
  58.                 g2.setColor(this.bgColor);
  59.                 g2.fillRect(0, 0, w, h);
  60.                 return image;
  61.         }
  62.        
  63.         public BufferedImage getImage () {
  64.                 BufferedImage image = createImage();
  65.                 Graphics2D g2 = (Graphics2D)image.getGraphics();
  66.                 StringBuilder sb = new StringBuilder();
  67.                 // 向图片中画4个字符
  68.                 for(int i = 0; i < 4; i++)  {
  69.                         String s = randomChar() + "";
  70.                         sb.append(s);
  71.                         float x = i * 1.0F * w / 5 + w/10;
  72.                         g2.setFont(randomFont());
  73.                         g2.setColor(randomColor());
  74. //                        double theta = new Random().nextInt() % 30 * Math.PI / 180;
  75. //                        g2.rotate(theta, x, h-5);
  76.                         g2.drawString(s, x, h-5);
  77. //                        g2.rotate(-theta, x, h-5);
  78.                        
  79.                 }
  80.                 this.text = sb.toString();
  81.                 drawLine(image);
  82.                 return image;               
  83.         }
  84.        
  85.         public String getText () {
  86.                 return text;
  87.         }
  88.        
  89.         public static void output (BufferedImage image, OutputStream out)
  90.                                 throws IOException {
  91.                 ImageIO.write(image, "JPEG", out);
  92.         }
  93. }

复制代码





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2