现在很多网站, 为了防止机器人程序任意发送垃圾数据, 机器注册, 机器留言等等, 都使用了验证码这个小玩意。 可是, 写的好的并不多。 万恶的XXX公司甚至使用了汉子。 那个度杂的啊。 对于很多人, 写一个完美的验证码程序却不是那么简单。当然, 我现在说的是不考虑一般的开发成本的做法, 我说说做法:
1. cache-control是第一个需要解决的问题, 大部分人都知道, 但是却是实现的办法很土。 很多人使用URL后面跟随一个随即数来解决这个问题, 虽然能达到效果, 但是却是很土的做法, 最好这么控制:
HttpServletResponse response = ....
response.setContentType("image/jpeg");
response.setHeader("Expires", "Sat, 16 Jan 1980 12:00:00 GMT");
response.setHeader("Cache-Control", "no-store, no-cache, must-revalidate");
response.addHeader("Cache-Control", "post-check=0, pre-check=0");
response.setHeader("Pragma", "no-cache");
2. 需要一个生成图片的API, 目前的选择是有很多的, 比如JMagic/Jai/ImageIO/Jimi等等, 非常的多。 不过, 要注意程序的通用性, 不考虑需要多余的包支持, 我还是建议选择Jai/ImageIO, 现在这个东西已经是Java5的一部分了。 如果需要提高性能, 需要另外安装这个东西的包, 在java.sun.com上能找到。 因为这2个包同时也支持Native的调用。
3. 如果访问有点多, 比如每次页面显示也会有, 那么Image的生成是非常消耗CPU的。 那么可以采取Cache的图片的方式, 把每次生成的cache起来, 能极大的提高输出速度。我们的做法是每天成10组不同的格式。放在内存里, 2台机器就能支持每天的访问。
4. 为了人性化, 我们比如把一些容易看错的删除掉, 比如0/O, 1/l等等, 避免客户不舒服。
5. 为色弱者提供语音的支持。 需要生成一个wav格式的流。这个也不是很好做的。
6. OCR程序读取图片的干扰措施。 现在的OCR程序的识别能力是非常强的, 基本正常字体都能轻易的读取。 所以, 这也是个非常不容易做的事情。 字体扭曲, 色彩干扰, 随意点干扰。 需要有很强的图形操作能力。
一个小小的验证码都需要很多的专业的知识。 目前网上的这些验证码其实基本已经是摆设了。 正常的字体的OCR识别太过于厉害了。
[url]http://sdh5724.iteye.com/blog/266010[/url]
1. cache-control是第一个需要解决的问题, 大部分人都知道, 但是却是实现的办法很土。 很多人使用URL后面跟随一个随即数来解决这个问题, 虽然能达到效果, 但是却是很土的做法, 最好这么控制:
HttpServletResponse response = ....
response.setContentType("image/jpeg");
response.setHeader("Expires", "Sat, 16 Jan 1980 12:00:00 GMT");
response.setHeader("Cache-Control", "no-store, no-cache, must-revalidate");
response.addHeader("Cache-Control", "post-check=0, pre-check=0");
response.setHeader("Pragma", "no-cache");
2. 需要一个生成图片的API, 目前的选择是有很多的, 比如JMagic/Jai/ImageIO/Jimi等等, 非常的多。 不过, 要注意程序的通用性, 不考虑需要多余的包支持, 我还是建议选择Jai/ImageIO, 现在这个东西已经是Java5的一部分了。 如果需要提高性能, 需要另外安装这个东西的包, 在java.sun.com上能找到。 因为这2个包同时也支持Native的调用。
3. 如果访问有点多, 比如每次页面显示也会有, 那么Image的生成是非常消耗CPU的。 那么可以采取Cache的图片的方式, 把每次生成的cache起来, 能极大的提高输出速度。我们的做法是每天成10组不同的格式。放在内存里, 2台机器就能支持每天的访问。
4. 为了人性化, 我们比如把一些容易看错的删除掉, 比如0/O, 1/l等等, 避免客户不舒服。
5. 为色弱者提供语音的支持。 需要生成一个wav格式的流。这个也不是很好做的。
6. OCR程序读取图片的干扰措施。 现在的OCR程序的识别能力是非常强的, 基本正常字体都能轻易的读取。 所以, 这也是个非常不容易做的事情。 字体扭曲, 色彩干扰, 随意点干扰。 需要有很强的图形操作能力。
一个小小的验证码都需要很多的专业的知识。 目前网上的这些验证码其实基本已经是摆设了。 正常的字体的OCR识别太过于厉害了。
[url]http://sdh5724.iteye.com/blog/266010[/url]