随机产生验证码是很常见也很简单的小算法,两层循环就可以搞定,随手记一下自己知道的两种比较常用的方法,以防忘记。
第一种:
首先定义一个char类型的包含字母和数字的数组
char[] chars = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'J', 'K', 'L',
'M', 'N', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y',
'3', '4', '5', '6', '7', '8', '9' };
定义一个和chars长度一样的标记数组,用来标记哪些位置被选择过,哪些位置没有被选择过。布尔型数组的默认值是false,被选择过后就为true了。
boolean[] flag = new boolean[chars.length];
char[] result = new char[5];
for (int i = 0; i < result.length; i++) {
int j;
do {
j = new Random().nextInt(chars.length);
} while (flag[j]);
result[i] = chars[j];
flag[j] = true;
}
String string = "";
for (int i = 0; i < result.length; i++) {
string += result[i];
}
第二种:
首先定义一个char类型
char[] a ={'A','B','C','D','E',
'F','G','H','I','J','K',
'L','M','N','O','P','Q',
'R','S','T','U','V','W',
'X','Z'};
首先随机找出一个字母,赋值给result,然后将随机找到的和i=0位置的字母进行交换,接着从1---a.length之间继续找(缩小区间),依次进行下去
char[] result =new char[5];
for(int i=0;i<5;i++){
int j= i+ new Random().nextInt(a.length-i);
result[i]= a[j];
char temp = a[i];
a[i]=a[j];
a[j]=temp;
}
将数组result结果连接成字符串
String s ="";
for(int i=0;i<result.length;i++){
s += result[i];
}