首先呢,我们要明确一点,为什么要用到验证码?它解决了什么问题?该怎么用?
我们都知道,浏览器都是用html的标准与网站的服务器动态连接的,而在html的表单提交中,基本都是用post的方法来提交数据的,这样很可能 被人使用机器人程序或者盗用Action的恶意程序进行批量注册和登陆尝试,从而攻击网站或者盗取他人密码。这时,验证码就有用啦,表单上会出现一个随机输出的验证码,这时采用注册机等暴力程序就会因为无法读取验证码而无能为力(也防止一些不法分子进行刷屏),保证网站的安全。
相信验证码大家都是见过的,有数字,有字母,甚至它们还有汉字,那么它们是怎么随机生成的呢?下面我们就来探讨这个问题。
数字的生成,在java中,java.util.Random类可以通过实例化一个Random对象来创建一个随机数生成数器。语法格式:
Random r=new Random(seedValue);
seedValue是指产生随机数的种子,一般可以用当前的时间作为种子。如:
Random r=new Random(new java.util.Date().getTime());
而生成的 r 大家都知道是一个Random对象吧?而在Random类中提供了不少方法来返回一个随机数:
public int nextInt();返回一个随机整数
public int nextInt(int n);返回一个大于0小于n的随机整数
public long nextLong();返回一个随机长整型数
public double nextDouble();返回一个随机双精度型值
public float nextFloat();返回一个随机浮点型数
。。。自己查api吧。。。
所以r.nextInt();就可以得到一个随机整数,print出来就可以了。
字母的生成,这个也很简单,大家都知道字母在ASCII表的值是65-90(大写字母)和97-122(小写字母),所以,只要能随机生成 65-90和97-122的整数,再转换成字符型(或者字符串型,最终还是要转换成字符串的,因为验证码 最后是一个字符串嘛),那么相应的字母也就生成出来了。这个简单吧。
代码:Random r = new Random();
int upCase = r.nextInt(26)+65;//得到65-90的随机数
int downCase = r.nextInt(26)+97;//得到97-122的随机数
String up =String.valueOf((char)upCase);//得到A-Z
String down =String.valueOf((char)downCase);得到a-z
汉字的生成,这个就比较麻烦了,所谓的麻烦是指我要解释得麻烦,要打很多字。。。
汉字是有一个全国统一的代码的,标准代号为GB2312-80,又称国标码。它规定了所有的国标汉字和符号分配在一个94行和94列的方阵里面,方 阵的每一行称为一个区,01区到94区;每一列称为一个位,01位到94位。每一个汉字的区码和位码组合的4个阿拉伯数字就是它们的“区位码”(可以用他 们唯一确定一个汉字)。
与汉字区位码类似的还有汉字机内码,汉字的机内码是在汉字的区位码的区码和位码上分别加上A0H(这里的H表示前两位数字为16进制数)得到的。使用机内码表示汉字占用2个字节,分别称为高位字节和地位字节,
高位字节=区码+A0H;
低位字节=位码+A0H;
如区位码为1601,区码位码分别用16进制表示为1001H,机内码的高位字节为B0H,低位字节为A1H,机内码就是B0A1H。
了解了这些之后,你就可以随机生成汉字了。代码如下(不是唯一性,参考用,懂得人可以按照自己想法随意写):
import java.util.Date;
import java.util.Random;
public class WordCode {
public static void main(String[] args) {
Random random=new Random();
String ctmp="";
String rbase[]={"0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f"};
//生成第一位区码
int r1=random.nextInt(3)+11;//生成11-14随机数
String str_r1=rbase[r1];
//生成第二位区码
int r2;
if(r1==13){
r2=random.nextInt(10);
}
else{
r2=random.nextInt(16);
}
String str_r2=rbase[r2];
//生成第一位位码
int r3=random.nextInt(6)+10;
String str_r3=rbase[r3];
//生成第二位位码
int r4;
if(r3==10){
r4=random.nextInt(14)+2;
}else{
r4=random.nextInt(16);
}
String str_r4=rbase[r4];
//将生成的区码放入第一个元素,位码放入第二个元素
byte a[]=new byte[2];
a[0]=(byte)Integer.parseInt(str_r1+str_r2,16);//转换成16进制
a[1]=(byte)Integer.parseInt(str_r3+str_r4,16);
ctmp=new String(a,"GB2312");//根据字节生成汉字
System.out.print(ctmp);
}
}
有了上面之后,生成的数字啊字母啊汉字啊都以字符串的形式组合,然后创建Graphics对象放进去用图像IO输出就可以生成图片啦(中文乱码注意字体)。
相关推荐
Java代码实现随机生成汉字的方法 Java代码实现随机生成汉字的方法是指利用Java语言编写的程序来随机生成汉字。该方法可以生成随机的汉字,满足特定的需求。 背景知识 -------- GB 2312-80 是中国国家标准简体中文...
本资源提供了一个专为游戏开发设计的昵称库,包含2万个随机生成的昵称,旨在满足中英文游戏的需求。 首先,我们要关注的是这个昵称库的构成。该库分为两部分:1万个中文昵称和1万个英文昵称。这样的设计考虑到了...
根据`type`的值,方法会将相应的字符数组添加到一个`ArrayList`中,然后使用`Random`对象从列表中随机选择字符,将它们添加到`StringBuffer`对象`code`中,最后返回生成的随机字符串。 例如,如果调用`PassWord....
验证码图片通常包含随机生成的汉字和/或字母数字组合,用户需要输入图片上显示的文字以证明他们是人类。下面我们将深入探讨如何使用Java实现这个功能。 首先,我们需要了解验证码生成的基本步骤: 1. **生成随机...
验证码通常包含一些随机生成的字符,这些字符可能是字母、数字或者是汉字,目的是让人类用户能够识别但机器难以解析。对于汉字验证码,我们需要一个汉字库,它包含了所有可能被选中的汉字。 在Java中,可以使用`...
验证码通常包含一组随机生成的字符,这些字符可以是中文、字母、数字或它们的组合。在Java中,可以使用`java.util.Random`类来生成随机数,然后通过字符集映射将这些数字转化为对应的字符。例如,如果要生成数字...
1. **随机字符生成**:验证码由一组随机字符组成,可以是数字、字母,也可以包括中文字符。在Java中,可以使用`java.util.Random`类生成随机数,配合字符数组来生成随机字符。 2. **图像创建**:生成的验证码需要...
Java代码生成汉字库是一个涉及到字符编码、汉字处理和随机生成技术的编程任务。在这个项目中,开发者使用Java语言创建了一个程序,能够按照GB2312、GBK、Unicode和UTF-8这四种常见的汉字编码标准生成汉字库。下面将...
1. **随机生成验证码字符串**:程序会随机选择一定数量的字符(数字和字母)组成验证码。为了增加破解难度,这些字符通常是无序的,并且可能包含大小写字母。 2. **绘制验证码图像**:生成的字符串会被转换成图像,...
Java Web中的随机汉字扭曲验证码是一种安全机制,用于防止自动化程序(如机器人)对网站进行恶意操作,如批量注册、重复发帖或发布垃圾信息。验证码的设计理念源于图灵测试,旨在区分计算机和人类用户。其工作原理是...
csdn上三种java验证码生成方法,以及谷歌开源验证码,总共四...3. 汉字验证码,噪点,未加扭曲(未使用字符集,随机生成汉字) 4. 谷歌开源验证码 只对第一种方法写了验证,后三种方法只有验证图片生成,验证方法同一。
在这个项目"Android随机生成验证码自定义View"中,我们将会探讨如何构建一个能够生成不同类型的验证码的自定义View,包括数字、字母、数字字母混合以及汉字验证码,并且可以灵活设置验证码的位数。 首先,我们要...
这种验证码通常包含随机生成的字母、数字或者符号,以动画的形式展示,用户需要输入看到的验证码才能继续操作。下面将详细讲解如何在Java中实现这个功能。 1. **基础概念** - **验证码**:验证码(CAPTCHA)是...
这个游戏的核心原理是随机生成英文单词,玩家需要在限定时间内正确输入这些单词来得分。通过这种方式,它结合了学习与娱乐,对提升用户键盘技能非常有帮助。 在提供的压缩包中,包含了游戏的源码文件(.java文件)...
- 要生成随机的车牌号,我们需要利用编程语言提供的随机数生成函数,如Python中的`random.choice()`或Java的`Random`类,来随机选择汉字、字母和数字。 3. **字符串处理**: - 生成车牌号后,需要将其格式化成...
以下将详细介绍如何在Java中创建一个能生成中文、英文和数字的验证码。 1. **随机数生成**:首先,我们需要生成随机的验证码字符。Java提供了`java.util.Random`类来生成随机数。对于英文和数字,我们可以直接使用...
在IT行业中,随机生成字符串是一项基础且重要的任务,它广泛应用于测试、密码生成、加密算法、数据填充等场景。"泰迪杯挑战数据_随机生成字符串_泰迪杯_"这个标题可能指的是一个编程竞赛或者练习项目,其中包含了对...
- 中文验证码:需要用到Unicode编码,通过随机选择汉字的Unicode范围(如\u4e00-\u9fff)来生成中文字符。 2. **图像生成**: - 使用`java.awt.Color`定义背景色、线条颜色等。 - `java.awt.Font`创建字体对象,...
为了增加破解的难度,验证码通常包含随机选取的汉字,而非简单的字母或数字。这需要开发者熟悉Unicode或GB2312等汉字编码标准,并能随机地从这些字符集中提取汉字。 再者,"彩色验证码"指的是验证码图像中的每个...
验证码的核心目标是生成不可预测且难以自动识别的随机字符串,通常由字母、数字或特殊字符组成。在本例中,验证码包含汉字,增加了破解的难度,因为汉字的数量远超英文字符,使得自动识别更加复杂。 1. **验证码...