`

java中的数字、字母、汉字如何随机生成

阅读更多

首先呢,我们要明确一点,为什么要用到验证码?它解决了什么问题?该怎么用?

我们都知道,浏览器都是用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代码实现随机生成汉字的方法是指利用Java语言编写的程序来随机生成汉字。该方法可以生成随机的汉字,满足特定的需求。 背景知识 -------- GB 2312-80 是中国国家标准简体中文...

    开发常用游戏昵称 java 随机

    本资源提供了一个专为游戏开发设计的昵称库,包含2万个随机生成的昵称,旨在满足中英文游戏的需求。 首先,我们要关注的是这个昵称库的构成。该库分为两部分:1万个中文昵称和1万个英文昵称。这样的设计考虑到了...

    java随机生成字符串(字符随机生成类 生成随机字符组合)

    根据`type`的值,方法会将相应的字符数组添加到一个`ArrayList`中,然后使用`Random`对象从列表中随机选择字符,将它们添加到`StringBuffer`对象`code`中,最后返回生成的随机字符串。 例如,如果调用`PassWord....

    java随机动态生成汉字验证码图片

    验证码图片通常包含随机生成的汉字和/或字母数字组合,用户需要输入图片上显示的文字以证明他们是人类。下面我们将深入探讨如何使用Java实现这个功能。 首先,我们需要了解验证码生成的基本步骤: 1. **生成随机...

    java随机动态生成汉字验证码图片的实例代码分享

    验证码通常包含一些随机生成的字符,这些字符可能是字母、数字或者是汉字,目的是让人类用户能够识别但机器难以解析。对于汉字验证码,我们需要一个汉字库,它包含了所有可能被选中的汉字。 在Java中,可以使用`...

    java随机生成验证码图片和校验

    验证码通常包含一组随机生成的字符,这些字符可以是中文、字母、数字或它们的组合。在Java中,可以使用`java.util.Random`类来生成随机数,然后通过字符集映射将这些数字转化为对应的字符。例如,如果要生成数字...

    java生成验证码的参考资料(中英文验证码)

    1. **随机字符生成**:验证码由一组随机字符组成,可以是数字、字母,也可以包括中文字符。在Java中,可以使用`java.util.Random`类生成随机数,配合字符数组来生成随机字符。 2. **图像创建**:生成的验证码需要...

    java代码产生汉字库

    Java代码生成汉字库是一个涉及到字符编码、汉字处理和随机生成技术的编程任务。在这个项目中,开发者使用Java语言创建了一个程序,能够按照GB2312、GBK、Unicode和UTF-8这四种常见的汉字编码标准生成汉字库。下面将...

    jsp随机验证码生成测试

    1. **随机生成验证码字符串**:程序会随机选择一定数量的字符(数字和字母)组成验证码。为了增加破解难度,这些字符通常是无序的,并且可能包含大小写字母。 2. **绘制验证码图像**:生成的字符串会被转换成图像,...

    Java Web中随机汉字扭曲验证码的实现.pdf

    Java Web中的随机汉字扭曲验证码是一种安全机制,用于防止自动化程序(如机器人)对网站进行恶意操作,如批量注册、重复发帖或发布垃圾信息。验证码的设计理念源于图灵测试,旨在区分计算机和人类用户。其工作原理是...

    java验证码生成验证

    csdn上三种java验证码生成方法,以及谷歌开源验证码,总共四...3. 汉字验证码,噪点,未加扭曲(未使用字符集,随机生成汉字) 4. 谷歌开源验证码 只对第一种方法写了验证,后三种方法只有验证图片生成,验证方法同一。

    Android随机生成验证码自定义View

    在这个项目"Android随机生成验证码自定义View"中,我们将会探讨如何构建一个能够生成不同类型的验证码的自定义View,包括数字、字母、数字字母混合以及汉字验证码,并且可以灵活设置验证码的位数。 首先,我们要...

    java 生成动态gif 验证码

    这种验证码通常包含随机生成的字母、数字或者符号,以动画的形式展示,用户需要输入看到的验证码才能继续操作。下面将详细讲解如何在Java中实现这个功能。 1. **基础概念** - **验证码**:验证码(CAPTCHA)是...

    java写的打字母游戏,源码,jar文件

    这个游戏的核心原理是随机生成英文单词,玩家需要在限定时间内正确输入这些单词来得分。通过这种方式,它结合了学习与娱乐,对提升用户键盘技能非常有帮助。 在提供的压缩包中,包含了游戏的源码文件(.java文件)...

    中文车牌生成代码

    - 要生成随机的车牌号,我们需要利用编程语言提供的随机数生成函数,如Python中的`random.choice()`或Java的`Random`类,来随机选择汉字、字母和数字。 3. **字符串处理**: - 生成车牌号后,需要将其格式化成...

    java生成验证码代码

    以下将详细介绍如何在Java中创建一个能生成中文、英文和数字的验证码。 1. **随机数生成**:首先,我们需要生成随机的验证码字符。Java提供了`java.util.Random`类来生成随机数。对于英文和数字,我们可以直接使用...

    泰迪杯挑战数据_随机生成字符串_泰迪杯_

    在IT行业中,随机生成字符串是一项基础且重要的任务,它广泛应用于测试、密码生成、加密算法、数据填充等场景。"泰迪杯挑战数据_随机生成字符串_泰迪杯_"这个标题可能指的是一个编程竞赛或者练习项目,其中包含了对...

    java完美的验证码生成

    - 中文验证码:需要用到Unicode编码,通过随机选择汉字的Unicode范围(如\u4e00-\u9fff)来生成中文字符。 2. **图像生成**: - 使用`java.awt.Color`定义背景色、线条颜色等。 - `java.awt.Font`创建字体对象,...

    Jsp-color-code.rar_java 验证码_jsp_汉字验证码_随机验证码_验证码

    为了增加破解的难度,验证码通常包含随机选取的汉字,而非简单的字母或数字。这需要开发者熟悉Unicode或GB2312等汉字编码标准,并能随机地从这些字符集中提取汉字。 再者,"彩色验证码"指的是验证码图像中的每个...

    字母_数字_汉字混合的验证码源码

    验证码的核心目标是生成不可预测且难以自动识别的随机字符串,通常由字母、数字或特殊字符组成。在本例中,验证码包含汉字,增加了破解的难度,因为汉字的数量远超英文字符,使得自动识别更加复杂。 1. **验证码...

Global site tag (gtag.js) - Google Analytics