首页 >>  正文

用java生成6位验证码,由大小写数字组成,不能重复字符

来源:www.zuowenzhai.com    作者:编辑   日期:2024-06-02
用java生成6位验证码,要求字母大小写数字组成,不能重复字符

public class GenerateRandomLetterAndNum {
public static void main(String[] args) {

Set store = getletterandnum(6);

printSet(store);

}

public static Set getletterandnum(int length) {

Set set =new HashSet();

for (int i = 0; i < length; i++) {

String value = getrandom();

set.add(value);
}

if (set.size()<length) { //如果没有生成6位

String value = getrandom();//继续调用生成随机数的方法

set.add(value);

}

return set;
}

private static String getrandom() { //生成随机字母和数字方法

String value = "";

Random random = new Random();

int gen = random.nextInt(2);//0、1、2

String charornum = gen % 2 == 0 ? "char" : "num";

if ("char".equals(charornum)) {

int temp = random.nextInt(2) % 2 == 0 ? 65 : 97;

int ascii = random.nextInt(26);

value += (char) (ascii + temp);

} else if ("num".equalsIgnoreCase(charornum)) {

value += String.valueOf(random.nextInt(10));
}
return value;
}

public static void printSet(Set set){ //打印set的方法

Iterator iterator = set.iterator();
while (iterator.hasNext()) {
String ele = (String) iterator.next();
System.out.print(ele+" ");

}

}

public class test{
private static String [] str={"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T",
"U","V","W","X","Y","Z","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t",
"u","v","w","x","y","z","0","1","2","3","4","5","6","7","8","9"};
private static String DarwCode(){
String strRandom="";
char temp;
int [] num = new int[6];
int numA=0,numB=0,numC=0,ramNum=(int)(Math.random()*62);
//去掉重复的关键代码
num[0]=ramNum;
for (int i = 1; i < num.length; i++) {
num[i] = (int)(Math.random()*62);
for (int j = 0; j < i; j++) {
while ((num[i]==num[j])&&(i>=1)) {
i--;
}
}
}
//输出字符串
for (int i = 0; i < num.length; i++) {
strRandom+=str[num[i]];
}
for (int i = 0; i <strRandom.length(); i++) {
temp=strRandom.substring(i,i+1).charAt(0);
if ((int)temp>=48&&(int)temp<=57) {
numA++;
}else if ((int)temp>=65&&(int)temp<=90) {
numB++;
}else if((int)temp>=97&&(int)temp<=122){
numC++;
}
}
if ((numA+numB==6)||(numA+numC==6)||(numB+numC==6)) {
strRandom = DarwCode();
}
return strRandom;
}
public static void main(String[] args) {
System.out.println(DarwCode());
}
}

生成随机可以用Random类,不能重复可以考虑放在HashSet中,因为HashSet的值是不能重复的,看代码如下:

public class GenerateRandomLetterAndNum {
public static void main(String[] args) {

 Set<String> store = getletterandnum(6);
 
 printSet(store);

}

public static Set<String> getletterandnum(int length) {

Set<String> set =new HashSet<String>();

for (int i = 0; i < length; i++) {

String value = getrandom();

set.add(value);
}

if (set.size()<length) { //如果没有生成6位

String value = getrandom();//继续调用生成随机数的方法

set.add(value);

}

return  set;
}

private static String getrandom() { //生成随机字母和数字方法

String value = "";

Random random = new Random();

int gen = random.nextInt(2);//0、1、2

String charornum = gen % 2 == 0 ? "char" : "num";

if ("char".equals(charornum)) {

int temp = random.nextInt(2) % 2 == 0 ? 65 : 97;

int ascii = random.nextInt(26);

value += (char) (ascii + temp);

} else if ("num".equalsIgnoreCase(charornum)) {

value += String.valueOf(random.nextInt(10));
}
return value;
}

public static  void printSet(Set set){ //打印set的方法

 Iterator iterator = set.iterator();
 while (iterator.hasNext()) {
String ele = (String) iterator.next();
System.out.print(ele+" ");

    }

}



19561631097用java生成6位验证码,要求字母大小写数字组成,不能重复字符
史屠瞿答:public class GenerateRandomLetterAndNum { public static void main(String[] args) { Set<String> store = getletterandnum(6);printSet(store);} public static Set<String> getletterandnum(int length) { Set<String> set =new HashSet<String>();for (int i = 0; i < length; i++...

19561631097用java生成6位验证码,由大小写数字组成,不能重复字符
史屠瞿答:set.add(value);}if (set.size()<length) { //如果没有生成6位String value = getrandom();//继续调用生成随机数的方法set.add(value);}return set;}private static String getrandom() { //生成随机字母和数字方法String value = "";Random random = new Random();int gen = random.ne...

19561631097java如何随机生成6位数的验证码
史屠瞿答:public static final char[] chars={'1','2','3','4','5','6','7','8','9','0','Q','W','E','R','T','Y','U','I','O','P','A','S','D','F','G','H','J','K','L','Z','X','C','V','B','N','M'};public static Random random=new R...

19561631097java如何实现6位数字短信验证码
史屠瞿答://网易云信分配的密钥,请替换你在管理后台应用下申请的appSecretprivate static final String APP_SECRET="aa6d416fdd4e";//验证码长度,范围4~10,默认为4private static final String CODELEN="6";这里有免费试学的视频供你参考学习:

19561631097Java怎么生成一个指定长度的字符串,且这个字符串必须包含大小写字母和数...
史屠瞿答:void main(void){ FILE * f;//文件句柄 char buf[20];//随机字符串 int i;randomize();//初始化随机值 for(i = 0;i < 20;i++)buf[i] = cszChar[random(62)];//随机从cszChar中取一个字符 f = fopen( "filename ", "w ");//打开...

19561631097为什么验证码不用区分大小写?
史屠瞿答:验证码有区分大小写的,也有不区分大小写的,主要取决于程序的实现。验证码是在规定的范围内进行自动生成的,存储数据如果记录大小,那么验证码就要区分大小写,如果不记录大小写,就不区分大小写。

19561631097JavaScript随机生成6位数的验证码,包含数字或大小写字母,并将验证码显...
史屠瞿答:给你提供个思路:创建一个6位的数组 循环数组,6次随机获取a-z,A-Z,0-9的字符和数字 将随机获取的字符和数字填入相对应数组下标之中 将数组的值拼接转换成字符串,填入文本框 谢谢采纳!

19561631097用java怎么制作验证码
史屠瞿答://将生成的验证码存到服务器 request.getSession().setAttribute("checkcode", stringbuffer.toString());//key和value //将图片发送给浏览器 ImageIO.write(image, "jpg", response.getOutputStream());} } 用户登录界面代码 package s1;import java.io.IOException;import java.io.PrintWriter;impor...

19561631097Java如何实现验证码验证功能
史屠瞿答:首先,写一个验证码生成帮助类,用来绘制随机字母: import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.image.BufferedImage; import java.io.IOException; import java.io.OutputStream; import java.util.Random; import javax.imageio.ImageIO; public final ...

19561631097怎样用java实现验证码
史屠瞿答:// 取随机产生的认证码( 位数字)String codeList = ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz ;String sRand= ;for (int i= ;i< ;i++){ int a=random nextInt(codeList length() );String rand=codeList substring(a a+ );sRand+=rand;// 将认证码显示到图象中 g setColor(...


(编辑:酆溥单)
联系方式:
关于我们 | 客户服务 | 服务条款 | 联系我们 | 免责声明 | 网站地图
@ 作文摘要网