放在string rund=“1234”的位置
你整个思路都错了。
你的想法很简单,添加一个函数,里面生成随机数,然后把这个随机数放在隐藏表单里。客户端输入和这个表单里的比较,一致就算验证。
但是这根本说明你对验证码是干嘛的没有理解。验证码的作用是防止机器代替人工操作。也就是让一个网页只能人操作,不能用机器去操作。而区分的关键在于,人可以轻松识别图像中扭曲的数字,而机器(相对来说)很困难。
因此机器不能得到正确的验证码,也就不能执行你的特定的逻辑。
而你直接把答案放在客户端的隐藏表单了,那么能阻止机器么?显然你整个都想错了。
正确的思路是,你服务器生成了随机数作为验证码,存入session,同时将图片发给用户,用户输入以后和你服务器上的比较,判断。全程客户端只能有图片验证码,不能接触到答案。
https://blog.csdn.net/weixian52034/article/details/52186207
这里有个非常简单的jsp验证码的例子
String verificationCode = (String)session.getAttribute("verificationCode"); 特别看这一行,验证码是存入session的,而不是客户端的表单、cookie等
当然,你说我就是胡乱做一个程序蒙鬼,那也可以
String rund = "";
Random r = new Random();
for (int i = 1; i <= 4; i++)
rund = rund + String.valueOf(r.nextInt(10));
我是来求给分的。
function coder(){
var v="<%=session.getAttribute("valinumber")%>";
if(v == $('code').val()){
alert(正确);
}else{
alert(错误);
}
}
<input type="text" name="code" id="code" onblur="coder()"></<input>
<img id="checkcode" src="checkcode.do"/>
<input type="submit" value="登录"></<input>
checkcode.do配置一个简单servlet,下面是servlet代码,目的生成验证码,转成图片输出
response.setContentType("image/jpeg");
BufferedImage image = new BufferedImage(60,20,BufferedImage.TYPE_INT_RGB);
Graphics g = image.getGraphics();
Random r = new Random();
g.setColor(new Color(r.nextInt(255),r.nextInt(255),r.nextInt(255)));
g.fillRect(0, 0, 60, 20);
String number = String.valueOf(r.nextInt(99999));
HttpSession session = request.getSession();
session.setAttribute("valinumber", number);
g.setColor(new Color(0,0,0));
g.drawString(number, 5, 15);
g.drawLine(r.nextInt(60), r.nextInt(20), r.nextInt(60), r.nextInt(20));
g.drawLine(r.nextInt(60), r.nextInt(20), r.nextInt(60), r.nextInt(20));
g.drawLine(r.nextInt(60), r.nextInt(20), r.nextInt(60), r.nextInt(20));
OutputStream outs = response.getOutputStream();
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(outs);
encoder.encode(image);