JAVA验证码原理及兑现

JAVA验证码原理及实现

不得不承认,网络确实是个好东西,只要在google或百度上搜索一下“java验证码”,就可以找到无数实现代码,但却很少有文章很仔细的讲解到底是如何实现验证码的生成的,比如现在要自己写一个生成验证码的java类,首先要想到什么,然后想到什么,需要用到java API里的哪些类及其方法,等等。就算在在搜索条件中加上“原理”二字,能搜到的相关的文献也相当的少!或许是网上那些写得出代码的人觉得这个原理很简单,根本就不用多讲,只要研读他们写的代码就可以学会了,但是我属于那种很容易思维定势的人,只要看了别人的代码,我就会很容易跟着别人的思维走,自己就完全没想法了。又或许是大家都觉得网上既然这么多,又何必自己去写,索性干脆不去了解其原理。我就是这样。我以前也工作过,那时候为了赶项目,需要验证码的时候就直接去网上copy了一分,改一下,然后交差,那时候似乎还洋洋自得,因为不仅完成了任务还潜移默化的认为是自己能力不错,感觉自己很了不起。直到有一天在研究生院里看到一位师兄做毕业论文的时候,发现他们要做一个东西,并不是去网上直接看代码,而是去先去找一些与自己要做的东西相关的实现原理方面的书,然后自己动手写代码。他们的行为提醒了我,我也是马上要读研的人,不能再想以前一样靠着CTRL+CCTRL+V混日子了,否则自己永远是一个“半路出家的和尚”,被人小视,找不到好工作。

由于种种原因,我决定这次自己尝试一下写一个生成验证码的类,不管好不好,至少自己努力了。也就是在写这个代码的过程中,我才发现,虽然工作了两年,一直在写java程序,但是事实上自己基础是如此的差!!!希望自己能从写这个小东西开始,能改变自己对待研发的态度和对待学习的态度,从而让自己不断进步!

代码这里就补贴了,以附件的形式上传。

1 楼 angkorpeach 2011-07-18  
纠正代码中的一个错误,之前VerificationCode.java文件中有一个方法
private int getRandomNumber(int minRange,int maxRange){
	Random random = new Random((long)minRange);
	int num = random.nextInt(maxRange);
	return num;
}


应该改成:
private int getRandomNumber(int minRange,int maxRange){
	Random random = new Random();
	int num = random.nextInt(maxRange - minRange);
	return num + minRange;
}


原因是:这次再查阅了API的时候我才明白 new Random((long seed) 并不是在一个基数上产生随机数,要产生两个数之间的随机数应该采用我修改后的方法。