点选随机汉字验证码实现的几个关键点
- 随机生成汉字
- 随机背景图片(只使用一张背景图略显尴尬)
- 字的布局
- 要允许一定的误差
随机生成汉字
/**
* 生成随机汉字
* @return
*/
private String getRandomChineseChar(){
String str;
int heightPos;//定义高低
int lowPos;
heightPos=(176+Math.abs(random.nextInt(39)));//获取最高位
lowPos=(161+Math.abs(random.nextInt(93)));//获取低位值
byte[] bytes=new byte[2];
bytes[0]=new Integer(heightPos).byteValue();
bytes[1]=new Integer(lowPos).byteValue();
try {
str=new String(bytes,"GBK");
} catch (UnsupportedEncodingException e) {
// e.printStackTrace();
str="䵵";//如有异常 我们返回这个字
}
return str;
}
生成随机颜色
/**
* 生成随机原色
* @return
*/
private Color getRandomColor(){
return new Color(random.nextInt(255),random.nextInt(255),random.nextInt(255));
}
生成汉字随机坐标
在这里我固定了几个字的顺序和位置,如果有需要可以对汉字进行顺序打乱后再定位
/**
* 生成个汉字和随机坐标
* @return
*/
public Map<String,int[]> createCode(){
int x=0;
int y=0;
Map<String,int[]> map=new HashMap<>();
for(i