哪位给点思路啊。,小弟无从下手

解决方案 »

  1.   

    牵涉到"JAVA 2D"知识,核心是awt包下的图像类.
      

  2.   

    随机中文汉字在网上应该也有demo吧还没用过不过大多都没必要一定用汉字吧随机码的目的就是防止恶意的评论或注册,打广告什么的
      

  3.   

    http://download.csdn.net/source/581660
    看看这个 也许你能用上
      

  4.   

    public class AuthImg extends HttpServlet{
    private static final long serialVersionUID=569987744556632111l; 
    //设置图形验证码中字符串的字体和大小
    private Font mFont=new Font("Arial Black",Font.PLAIN,16);
    public void init() throws ServletException{
    super.init();
    }
    //生成随机颜色
    Color getRandColor(int fc,int bc){
    Random random=new Random();
    if(fc>255) fc=255;
    if(bc>255) bc=255;
    int r=fc+random.nextInt(bc-fc);
    int g=fc+random.nextInt(bc-fc);
    int b=fc+random.nextInt(bc-fc);
    return new Color(r,g,b);
    }
    //生成服务器响应的service方法
    public void service(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException{
    //阻止生成的页面内容被缓存,保证每次重新生成随机验证码
    response.setHeader("Pragna", "No-cache");
    response.setHeader("Cache-Control", "no-cache");
    response.setDateHeader("Expires", 0);
    response.setContentType("image/jpeg");
    //指定图形验证码图片的大小
    int width=70,height=18;
    //生成一张新图片
    BufferedImage image=new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
    //在图片中绘制内容
    Graphics g=image.getGraphics();
    Random random=new Random();
    g.setColor(getRandColor(200, 250));
    g.fillRect(1, 1, width-1, height-1);
    g.setColor(new Color(102,102,102));
    g.drawRect(0, 0, width-1, height-1);
    g.setFont(mFont);
    //随机生成线条,让图片看起来更加杂乱
    g.setColor(getRandColor(160, 200));
    for(int i=0;i<155;i++){
    int x=random.nextInt(width-1);
    int y=random.nextInt(height-1);
    int xl=random.nextInt(6)+1;
    int yl=random.nextInt(12)+1;
    g.drawLine(x,y,x+xl,y+yl);
    }
    //该变量用户保存系统生成的随机字符串
    String sRand="";
    for(int i=0;i<4;i++){
    //取得一个随机字符
    String tmp=getRandomChar();
    sRand+=tmp;
    //将系统生成的随机字符添加到图形验证码图片上
    g.setColor(new Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110)));
    g.drawString(tmp, 15*i+10, 15);
    }
    //取得用户Session
    HttpSession session=request.getSession();
    //将系统生成的图形验证码添加到用户Session中
    session.setAttribute("rand", sRand);
    g.dispose();
    //输出图形验证码图片
    ImageIO.write(image, "JPEG", response.getOutputStream());
    }
    public String getRandomChar()
    {
    // int rand=(int)Math.round(Math.random()*2);
    long itmp=0;
    // char ctmp='\u0000';
    // //根据rand的值来决定是生成一个大写字母、小写字母和数字
    // switch(rand)
    // {
    //      //生成大些字母的情形
    //      case 1:
    //       itmp=Math.round(Math.random()*25+65);
    //       ctmp=(char)itmp;
    //       return String.valueOf(ctmp);
    //      //生成小写字母的情形
    //      case 2:
    //       itmp=Math.round(Math.random()*25+97);
    //       ctmp=(char)itmp;
    //       return String.valueOf(ctmp);
    //      //生成数字的情形
    //      default:
          itmp=Math.round(Math.random()*9);
             return String.valueOf(itmp);
    // }
    }}
    我这边有一段生成随机英文和数字的代码。
    你可以参考下,你可以将需要生成的中文先存入数组中。然后随机从数组中获取
      

  5.   

    呵呵。我觉得char a = 25106之类的。。转换成汉字。
      

  6.   

    String str ="===========";====代表一些常用的汉字;然后for(int i=0;i<4;i++){
             int c = Math。Random()* 汉字的个数;
               stt[i]=str.get(c);
    }
    试试吧 我也是写着玩的
      

  7.   

    坏了有语法错误  int c = (int)Math.random()* 汉字的个数;(最好是正十的)