求卡通农场ios安卓同步安卓版2017年10月16日的最新版安装包

验证码:你是人类吗?
(原标题:验证码:你是人类吗?)
验证码:你是人类吗?&  《中国新闻周刊》记者|陈飞微信公号:百万庄的小星星“你买到票了吗?”成了最近流行的一句问候语。12月10日,铁路系统开始发售2月7日除夕的火车票。在奋力抢票之余,12306网站的验证码成了网友们集中吐槽的对象。该网站的最新验证码系统采用图片加逻辑问题的形式:“请点击下图中所有的非智能眼镜。”“请点击下图中所有的博斯普鲁斯海峡。”这些“奇葩”的图片选择题难倒了不少人。网友感叹:“这不仅是考我的眼力,还要考知识面啊!”吐槽风潮中,甚至有人PS出各种无厘头的验证图片对该网站进行恶搞,以示抗议。不过,被嫌弃的验证码,并不是从一开始就这么让人讨厌的。  验证码不是用来黑的尽管被买火车票的人们百般吐槽,但小小的验证码其实大有来头。验证码只是一个俗称,它还有一个听起来非常“高大上”的全名——全自动区分计算机和人类的图灵测试(英文缩写CAPTCHA)。图灵测试是指一种测试机器是不是具备人类智能的方法,而验证码则反其道而行之——它利用人与计算机在认知方面的差异,来确认操作者是人类,从而阻止恶意软件的侵入。2000年左右,雅虎公司受到了很大困扰,有人用黑客程序在短时间内自动创建了上千个电子邮件地址,然后利用这些地址发送垃圾邮件。但他们不可能一一审查邮件,因为那样做既不尊重隐私,工作量也太大。为此,雅虎找到了当时年仅21岁、正在卡内基梅隆大学读书的路易斯·冯·安(Luis von Ahn)。这位计算机天才后来被美国《探索》杂志评为“20位40岁以下的最聪明的科学家”之一。路易斯发现,对于那些镶嵌在图片中的、被扭曲过、污染过的文字,机器无法辨识,而人类稍加注意就可以识别出来。路易斯在导师布鲁姆的帮助下很快设计了一个程序,也就是现在的CAPTCHA。它首先生成一个随机的字符串,比如“smwm”,然后对这串字符进行随机的扭曲、重叠、污染,再显示给要进行操作的用户。于是,在计算机“眼中”,这串字符只是一组毫无意义的曲线,而人类很容易就能够识别这个变了形的“smwm”。在路易斯研发这一系统之前,早期的验证码可能只是一串简单的ASCⅡ字符(即“美国信息交换标准代码”,是基于拉丁字母的一套电脑编码系统)。但随机数字或字母验证码,可以通过编写对应的软件来破解。后来,验证码变成了通过图片显示字符串或者数字的形式,但带光学字符识别(OCR)的软件也可以绕过这种验证码。这就是为什么现在的验证码中字符通常都经过了一定程度的扭曲变形的原因。这类验证码最易自动产生,具有标准答案,不受背景知识和文化差异的影响。其图像中包含的字符序列既能与背景图像进行融合,又能做出扭曲、变形之类的效果处理,所以被破解的难度很大。我们平日访问的网站,大都使用了这种基于字符的图片验证码。不过,随着计算机技术的不断进步,个人网络安全保护成了一件越来越复杂的事。即使是扭曲、变形的验证码,也并不能完全将机器人阻挡在外。好在就破解验证码来说,尖端的图像识别技术需要花费大量时间和金钱成本。因而只有那些涉及机密、金钱利益的网站,比如网上银行、购物网站等受到较大威胁。为了防止财产损失,这些网站纷纷推出了各种进化版的验证码。主流的验证码都是静态图片,有些网站则推出了动态验证码,令机器人很难捕捉。还有一些程序可以生成3D二维码,更加难以识别。此外,还有很多大型购物网站要求发送手机短信验证码,以确保操作者是用户本人。又或者,问用户一个常识性的问题,比如“牛奶和汽油哪个可以喝?”——总之,就是选择一些机器不会、但是人类可以轻易回答的问题。不过,也有一些网站会做得比较过火,甚至,它们的验证码可能是一道微积分题,或者出一些难度让人抓狂的智力测试题,还有的网站竟然让人把看到的图片照着画下来。 12306惹谁了当然,在提升验证码难度这件事上,12306网站也一直在不懈地努力——也许稍微过头了点儿。为了防止“技术黄牛”刷票,12306系统几乎保持着每年更新的节奏,简直书写了一部黄牛与12306的技术博弈史。2010年,12306订票系统面世。紧随其后,2011年就出现了当时最早的刷票软件,黄牛可以在短时间内定光一趟车的票。2012年,12306上线了排队系统,升级了验证码。但很快黄牛就发明了新软件,可以强行购买一趟票已经售罄的列车的车票。这样,一旦有退票,就会立刻落入黄牛手中。之后,又经过了几次让验证码越来越“扭曲”的升级,日,网站启用现在的图片验证码。目前,12306的图形码的数量已经多达581种。按照要输入两个关键词的登录规则,用户将有机会尝试336980道不同的验证码题目。据360浏览器提供的数据,用户一次输入正确的概率仅为8%,两次成功的比率为27%,而需要输入三次甚至四次才能答对的人数比例为65%。验证难度大的原因在于,12306网站的图形大概有12个品类,而另一方面,由于图形的像素不高,又有许多相似物品的图形出现,所以选错的几率非常高,这就直接造成用户抢票失败的情况。提供这一系统的杭州微触科技有限公司,把自身定位为“12306网站图片验证码专利方”。对于他们设计的广受诟病的验证码系统,该公司负责人称:“这样做的目的是保证所有人的购票公平性,图标式点触验证码是打击黄牛的最重一拳,今年也是网上售票以来第一次真正实现了公平的购票环境。”北京邮电大学网络技术研究院教授马严认为,目前的这种图片结合逻辑判断的验证码,从技术上对抗机器人软件确实效果不错,除非网站代码自身有漏洞,否则很难绕过,所以12306的图片验证码对黄牛软件确实可以实现有效的封堵。但目前来看,验证码的缺陷是逻辑问题的判断上需要花费大量精力和技巧,最好能更简单清晰。而网友的普遍看法则是“然并卵”。一位知乎网友表示:“现在的问题是,验证码调得难度这么高,机器识别不出,人识别也很费劲,这并没有起到任何效果。”毕竟,验证码的作用是让机器无法识别,而不是为了难住用户,让用户无法正常使用。铁路总公司目前已经开始考虑采取一些措施使图形码更容易辨认。对此,中国铁道科学研究院电子计算机研究所副所长朱建生说:“我们会删除清晰度不高,难辨认的图片,并且不断筛选更新清晰度更高的图片,让旅客更顺畅地购票。”  验证码升级大战越来越智能的计算机与越来越复杂的验证码,两者之间形成“道高一尺魔高一丈”式的升级大战。其结果是,人们也越来越容易被验证码折磨或者难住。很多人开始问这个问题:“万恶的”验证码真的是必要的吗?其实,人们花在识别验证码上的时间,并没有完全被浪费。据CAPTCHA发明者路易斯估算,全世界的网民每天要输入验证码总共接近2亿次,假设每次花费10秒,那大概就花费了50多万个小时。他告诉美国公共电视台说:“我开始思考:我们是否可以把这种劳动用于为人类造福?”于是,路易斯提出了“reCAPTCHA”系统作为解决方案。现在,很多旧的书籍、报纸需要整理成电子版,但是电脑扫描辨识时常常出错,因为这些资料常常不可避免地有字迹模糊、褪色、污损等情况。对此,唯一的方法是人工核对。那么,为什么不让网民们来帮忙呢?ReCAPTCHA系统于是出现了。它是一种双重验证码,让你可以在输验证码的时候帮助还原书籍、报刊中那些很难被OCR识别的单词。为了验证输入的文字是正确的,而不是随意输入的,网页上会显示两组字符:一个是OCR无法识别的,另一个是系统知道正确答案的。如果你第二组答对了,就会被确认是人工操作,于是你对第一组的答案会被用来贡献一次人工校对。路易斯还将同一个未知的单词输送给多个用户,如果所有用户辨识的结果一致,那么就认为这个单词被正确识别了。很快,ReCAPTCHA就被谷歌收购了,现在已经成为了谷歌旗下的一项免费服务。据杜克大学官方杂志《杜克》估算,2011年有6000万至7000万人每天破解大约一亿个单词——你可能也在无意中参与其中。从2012年起,它还增加了一项新功能:显示谷歌地图上的街景地址和名称(从地图上的街景中提取街道地址和名称以及交通标志等数据,以完善谷歌地图上的信息)。目前,reCAPTCHA正在进行《纽约时报》扫描存档的信息化工作,并已完成20年的资料。实际上,一些科技公司已经开始抛弃挑战计算机光学字符识别(OCR)能力的思路,开发一些对人类来说较为轻松,但计算机又无法识别的验证码。比如,谷歌公司最近使用的办法是,用户只需要点击一个复选框(勾选“我不是机器人”)即可完成验证工作。如果这样还不能判定是机器人还是人类,那么会使用旧版的reCAPTCHA方法来验证。据透露,在使用新方式的时候,约60%的WordPress、80%的Humble Bundle用户可以验证成功,因而他们不需要再进入到reCAPTCHA界面。这种方式的具体原理,是在用户使用网络的时候就开始收集大量信息,包括IP地址、Cookies等,然后通过这些数据来判定用户现在与过去的使用方式是否一致,从而确定操作者到底是不是机器人。不仅如此,谷歌还会根据用户鼠标在复选框上的移动方式、点击方式等细微动作,来确定人与机器人的区别。可以看到,解决验证计算机使用者身份问题的方法从来不是只有一种。除了谷歌主要基于用户数据的判断方式之外,新的验证机制也有很多。例如,有的使用触觉原理,要求用户将一个滑块推动到指定位置;或者给出一条曲线,用户需要用鼠标照着画一遍;用鼠标给一些字母排序也能难住恶意软件。当然,还有利用人脸识别与语音识别的方法。
可以说,中国铁路购票系统12306网的验证码被嫌弃的最大原因,并不是因为它本身有多么困难,而在于在那么多种选择中,他们偏偏使用了最不人性化的一种。不考虑用户体验的技术总是会遭到吐嘈,在互联网时代,吐嘈可谓是用户的一种最容易发起的集体狂欢。 本文首发刊载于《中国新闻周刊》总第737期声明:刊用《中国新闻周刊》稿件务经书面授权
(原标题:验证码:你是人类吗?)
本文来源:中国新闻周刊
责任编辑:黄欢_NN1650
关键词阅读:
不做嘴炮 只管约到
跟贴热词:
文明上网,登录发贴
网友评论仅供其表达个人看法,并不表明网易立场。
热门产品:   
:        
:         
热门影院:
用微信扫描二维码分享至好友和朋友圈验证码在哪里,你TM在逗我?_steam吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0可签7级以上的吧50个
本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:1,009,639贴子:
验证码在哪里,你TM在逗我?
38*9.99=379.62 欺负我...
擦 为什么不让进 检查个...
大家猜猜我段位
明天才是周五好不好!!!
楼下发图 楼主新人
在哔站看人直播红2结果...
玛纳塔专注于家庭教育、家庭健康的定制服务
没发全,真是喜闻乐见
听说用手机登能看到
别直接点进邮件,让steam邮件再发一次,再点击未接邮件,再点展开全文
贴吧热议榜
使用签名档&&
保存至快速回贴4014人阅读
JAVA(21)
JAVA WEB(14)
验证码操作在开发中是经常会使用到的,这里我为大家提供三种生成验证码方式,分别是:(1)jsp页面中直接生成验证码、(2)使用Servlet生成验证码、(3)、在struts2中实现验证码操作。下面就来看一下它们都是怎样实现的,这里提供完整的代码,并有详细的注释说明。
(1)、在jsp页面中直接生成验证码
//image.jsp
&%@ page contentType=&image/jpeg&
import=&java.awt.*,java.awt.image.*,java.util.*,javax.imageio.*&
pageEncoding=&GBK&%&
&%!Color getRandColor(int fc, int bc) {//给定范围获得随机颜色
Random random = new Random();
if (fc & 255)
if (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);
//设置页面不缓存
response.setHeader(&Pragma&, &No-cache&);
response.setHeader(&Cache-Control&, &no-cache&);
response.setDateHeader(&Expires&, 0);
// 在内存中创建图象
// 通过这里可以修改图片大小
int width = 85, height = 23;
BufferedImage image = new BufferedImage(width, height,
BufferedImage.TYPE_INT_RGB);
// 获取图形上下文
// g相当于笔
Graphics g = image.getGraphics();
//生成随机类
Random random = new Random();
// 设定背景色
g.setColor(getRandColor(200, 250));
// 画一个实心的长方,作为北京
g.fillRect(0, 0, width, height);
//设定字体
g.setFont(new Font(&黑体&, Font.PLAIN, 18));
g.setColor(Color.BLUE);
g.drawRect(0,0,width-1,height-1);
// 随机产生155条干扰线,使图象中的认证码不易被其它程序探测到
g.setColor(getRandColor(160, 200));
for (int i = 0; i & 155; i++) {
int x = random.nextInt(width);
int y = random.nextInt(height);
int xl = random.nextInt(12);
int yl = random.nextInt(12);
g.drawLine(x, y, x + xl, y + yl);
// 取随机产生的认证码(4位数字)
//String rand = request.getParameter(&rand&);
//rand = rand.substring(0,rand.indexOf(&.&));
String sRand = &&;
// 如果要使用中文,必须定义字库,可以使用数组进行定义
// 这里直接写中文会出乱码,必须将中文转换为unicode编码
String[] str = { &A&, &B&, &C&, &D&, &E&, &F&, &G&, &H&, &J&, &K&,
&L&, &M&, &N&, &P&, &Q&, &R&, &S&, &T&, &U&, &V&, &W&, &X&,
&Y&, &Z&, &a&, &b&, &c&, &d&, &e&, &f&, &g&, &h&, &i&, &j&,
&k&, &m&, &n&, &p&, &s&, &t&, &u&, &v&, &w&, &x&, &y&, &z&,
&1&, &2&, &3&, &4&, &5&, &6&, &7&, &8&, &9& };
for (int i = 0; i & 5; i++) {
String rand = str[random.nextInt(str.length)];
// 将认证码显示到图象中
g.setColor(new Color(20 + random.nextInt(110), 20 + random
.nextInt(110), 20 + random.nextInt(110)));//调用函数出来的颜色相同,可能是因为种子太接近,所以只能直接生成
g.drawString(rand, 16 * i + 6, 19);
// 将认证码存入SESSION
session.setAttribute(&rand&, sRand);
// 图象生效
g.dispose();
// 输出图象到页面
ImageIO.write(image, &JPEG&, response.getOutputStream());
out.clear();
out = pageContext.pushBody();
//使用验证码的页面login.jsp
&%@ page contentType=&text/html& pageEncoding=&GBK&%&
&title&登陆页面&/title&
function reloadImage() {
document.getElementById('identity').src = 'image.jsp?ts=' + new Date()
.getTime();
// 乱码解决
request.setCharacterEncoding(&GBK&);
&%=request.getAttribute(&info&) != null ? request
.getAttribute(&info&) : &&%&
&form action=&check.jsp& method=&post&&
&input type=&text& name=&mid&&
&input type=&password& name=&password&&
&input type=&text& name=&code&
maxlength=&5& size=&5&&
&img src=&image.jsp& id=&identity& onclick=&reloadImage()& title=&看不清,点击换一张&&
&input type=&submit& value=&登陆&&
&input type=&reset& value=&重置&&
效果如下:
&(2)、使用Servlet生成验证码
//IdentityServlet.java代码如下:
package com.helloweenvsfei.
import java.awt.C
import java.awt.F
import java.awt.Graphics2D;
import java.awt.image.BufferedI
import java.io.IOE
import java.util.R
import javax.servlet.ServletE
import javax.servlet.ServletOutputS
import javax.servlet.http.HttpS
import javax.servlet.http.HttpServletR
import javax.servlet.http.HttpServletR
import com.sun.image.codec.jpeg.JPEGC
import com.sun.image.codec.jpeg.JPEGImageE
public class IdentityServlet extends HttpServlet {
private static final long serialVersionUID = -942306L;
public static final char[] CHARS = { '2', '3', '4', '5', '6', '7', '8',
'9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'J', 'K', 'L', 'M',
'N', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z' };
public static Random random = new Random();
public static String getRandomString() {
StringBuffer buffer = new StringBuffer();
for (int i = 0; i & 6; i++) {
buffer.append(CHARS[random.nextInt(CHARS.length)]);
return buffer.toString();
public static Color getRandomColor() {
return new Color(random.nextInt(255), random.nextInt(255), random
.nextInt(255));
public static Color getReverseColor(Color c) {
return new Color(255 - c.getRed(), 255 - c.getGreen(), 255 - c
.getBlue());
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType(&image/jpeg&);
String randomString = getRandomString();
request.getSession(true).setAttribute(&randomString&, randomString);
int width = 100;
int height = 30;
Color color = getRandomColor();
Color reverse = getReverseColor(color);
BufferedImage bi = new BufferedImage(width, height,
BufferedImage.TYPE_INT_RGB);
Graphics2D g = bi.createGraphics();
g.setFont(new Font(Font.SANS_SERIF, Font.BOLD, 16));
g.setColor(color);
g.fillRect(0, 0, width, height);
g.setColor(reverse);
g.drawString(randomString, 18, 20);
for (int i = 0, n = random.nextInt(100); i & i++) {
g.drawRect(random.nextInt(width), random.nextInt(height), 1, 1);
// 转成JPEG格式
ServletOutputStream out = response.getOutputStream();
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
encoder.encode(bi);
out.flush();
public static void main(String[] args) {
System.out.println(getRandomString());
//Web.xml的配置为:
&servlet-name&IdentityServlet&/servlet-name&
&servlet-class&com.helloweenvsfei.servlet.IdentityServlet&/servlet-class&
&/servlet&
&servlet-mapping&
&servlet-name&IdentityServlet&/servlet-name&
&url-pattern&/servlet/IdentityServlet&/url-pattern&
&/servlet-mapping&
//测试页面identity.html为:
&!DOCTYPE HTML PUBLIC &-//W3C//DTD HTML 4.01 Transitional//EN&&
&title&identity.html&/title&
&meta http-equiv=&keywords& content=&keyword1,keyword2,keyword3&&
&meta http-equiv=&description& content=&this is my page&&
&meta http-equiv=&content-type& content=&text/ charset=GB18030&&
&!--&link rel=&stylesheet& type=&text/css& href=&./styles.css&&--&
function reloadImage() {
document.getElementById('btn').disabled =
document.getElementById('identity').src='servlet/IdentityServlet?ts=' + new Date().getTime();
&img src=&servlet/IdentityServlet& id=&identity& onload=&btn.disabled = & /&
&input type=button value=& 换个图片 & onclick=&reloadImage()& id=&btn&&
(3)、在Struts2应用中生成验证码
//RandomNumUtil.java
package org.ml.
import java.awt.C
import java.awt.F
import java.awt.G
import java.awt.image.BufferedI
import java.io.ByteArrayInputS
import java.io.ByteArrayOutputS
import java.util.R
import javax.imageio.ImageIO;
import javax.imageio.stream.ImageOutputS
public class RandomNumUtil {
public static final char[] CHARS = {'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','a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'm',
'n', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'};
private ByteArrayInputS// 图像
private S// 验证码
构造方法调用初始化属性方法
private RandomNumUtil() {
* 取得RandomNumUtil实例
public static RandomNumUtil Instance() {
return new RandomNumUtil();
* 取得验证码图片
public ByteArrayInputStream getImage() {
return this.
* 取得图片的验证码
public String getString() {
return this.
* 初始化属性否具体方法
private void init() {
// 在内存中创建图象
int width = 85, height = 18;
//设置图形的高度和宽度,以及RGB类型
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(0, 0, width, height);
// 设定字体
g.setFont(new Font(&Times New Roman&, Font.PLAIN, 18));
// 随机产生255条干扰线,使图象中的认证码不易被其它程序探测到
g.setColor(getRandColor(160, 200));
for (int i = 0; i & 255; i++) {
int x = random.nextInt(width);
int y = random.nextInt(height);
int xl = random.nextInt(12);
int yl = random.nextInt(12);
g.drawLine(x, y, x + xl, y + yl);
// 取随机产生的认证码(6位数字)
StringBuffer sRand = new StringBuffer();
for (int i = 0; i & 6; i++) {
String rand = String.valueOf(CHARS[random.nextInt(CHARS.length-1)]);//从字符数组中随机产生一个字符
sRand.append(rand);
// 将认证码显示到图象中
g.setColor(new Color(20 + random.nextInt(110), 20 + random.nextInt(110), 20 + random.nextInt(110)));
// 调用函数出来的颜色相同,可能是因为种子太接近,所以只能直接生成
g.drawString(rand, 13 * i + 6, 17);
// 赋值验证码
this.str = sRand.toString();
// 图象生效
g.dispose();
//下面将生成的图形转变为图片
ByteArrayOutputStream output = new ByteArrayOutputStream();
ByteArrayInputStream input =
ImageOutputStream imageOut = ImageIO.createImageOutputStream(output);
ImageIO.write(image, &JPEG&, imageOut);//将图像按JPEG格式写入到imageOut中,即存入到output的字节流中
imageOut.close();//关闭写入流
input = new ByteArrayInputStream(output.toByteArray());//input读取output中的图像信息
} catch (Exception e) {
System.out.println(&验证码图片产生出现错误:& + e.toString());
this.image =/* 赋值图像 */
* 给定范围获得随机颜色
private Color getRandColor(int fc, int bc) {
Random random = new Random();
if (fc & 255)
if (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);
//RandomAction.java的代码:
package org.ml.
import java.io.ByteArrayInputS
import org.ml.util.RandomNumU
import com.opensymphony.xwork2.ActionC
import com.opensymphony.xwork2.ActionS
@SuppressWarnings(&serial&)
public class RandomAction extends ActionSupport {
private ByteArrayInputStream inputS
public String execute() throws Exception {
RandomNumUtil rdnu = RandomNumUtil.Instance();//取得随机验证码产生类的对象
this.setInputStream(rdnu.getImage());// 取得带有随机字符串的图片
ActionContext.getContext().getSession().put(&random&, rdnu.getString());// 取得随机字符串放入HttpSession
return SUCCESS;
public void setInputStream(ByteArrayInputStream inputStream) {
this.inputStream = inputS
public ByteArrayInputStream getInputStream() {
return inputS
//struts.xml配置为:
&!-- Random验证码 --&
&action name=&rand& class=&org.ml.action.RandomAction&&
&result type=&stream& name=&success&&
&param name=&contentType&&image/JPEG&/param&
&param name=&inputName&&inputStream&/param&
&/action&//HTML中的表单代码为:
&tr& height=&35& &
&&td width=&14%& class=&top_hui_text&&
&&&span class=&login_txt&& 验证码: && &/span&
&&td colspan=&2& class=&top_hui_text&&
&&&input type=&text& name=&rand& id=&rand& size=&6&
&&&maxlength=&6&&
&&&& &script type=&text/javascript&&
&&function changeValidateCode(obj) {
&&//获取当前的时间作为参数,无具体意义
&&&var timenow = new Date().getTime();
&&//每次请求需要一个不同的参数,否则可能会返回同样的验证码
&&//这和浏览器的缓存机制有关系,也可以把页面设置为不缓存,这样就不用这个参数了。
&&&obj.src=&rand.action?d=&+
& &/script&
&&&img src=&rand.action& title=&点击图片刷新验证码&
&&&onclick=&changeValidateCode(this)& height=&22&
&&&width=&80& /&
以上使用了三种方式进行验证码的生成,如果需要的话,可以仿照这个来进行开发。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:462655次
积分:3966
积分:3966
排名:第6588名
原创:50篇
转载:28篇
评论:160条
(1)(1)(1)(2)(1)(2)(1)(1)(1)(2)(4)(8)(16)(17)(10)(9)

我要回帖

更多关于 卡通农场活动表2017 的文章

 

随机推荐