java验证码中的数字,字母,汉字怎么随机生成
2个回答
2017-05-27
展开全部
数字,字母比较简单。
//手写的,省略了一部分
String szzm = "0123...789abc...xyzABC...XYZ";
StringBuilder bu = new StringBuilder();
for(int i = 0;i<6;i++){
bu.append(szzm.charAt(new Random().nextInt(szzm.length())));
}
System.out.println(bu.toString());
汉字复杂一些。我的方法是数字区间,19968~40869 之间 int 转char 都会变成汉字。
不过这个范围有点大,2w多汉字,有繁体的,还有生僻字。 如果不怕麻烦,汉字也可和数字一样,弄个汉字表。
StringBuilder bu = new StringBuilder();
int base = 19968;
int qujian = 40869 - 19968;
for(int i = 0;i<6;i++){
int rand = base + new Random().nextInt(qujian);
bu.append((char)rand);
}
System.out.println(bu.toString());
2017-05-27
展开全部
/**
* 创建指定数量的随机字符串
*
* @param numberFlag
* 是否是数字(true是纯数字,false是包含字母)
* @param length
* 生成的位数
* @return
*/
public static String createRandom(boolean numberFlag, int length) {
String retStr = "";
String strTable = numberFlag ? "1234567890" : "1234567890abcdefghijkmnpqrstuvwxyz";
int len = strTable.length();
boolean bDone = true;
do {
retStr = "";
int count = 0;
for (int i = 0; i < length; i++) {
double dblR = Math.random() * len;
int intR = (int) Math.floor(dblR);
char c = strTable.charAt(intR);
if (('0' <= c) && (c <= '9')) {
count++;
}
retStr += strTable.charAt(intR);
}
if (count >= 2) {
bDone = false;
}
} while (bDone);
return retStr;
}
/**
*随机生成常见的汉字
*/
private static char getRandomChar() {
String str = "";
int hightPos; //
int lowPos;
Random random = new Random();
hightPos = (176 + Math.abs(random.nextInt(39)));
lowPos = (161 + Math.abs(random.nextInt(93)));
byte[] b = new byte[2];
b[0] = (Integer.valueOf(hightPos)).byteValue();
b[1] = (Integer.valueOf(lowPos)).byteValue();
try {
str = new String(b, "GBK");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
System.out.println("错误");
}
return str.charAt(0);
}
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询