java验证码中的数字,字母,汉字怎么随机生成

 我来答
匿名用户
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);
}
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式