现在很多应用的验证码采用的中文验证码,一定程度的放大了OCR之类的图像识别破解验证码的难度,原理主要是中文编码的生成格式,规定两个127以后的字节组合在一起形成一个汉字,前面的一个字节(高位)从0xA1到0xF7,后面的一个字节(低位)从0xA1到0xFE。这样就能组成7000多个简体汉字。
为了去掉生僻字,选取高位176到215,低位161到254,保留下来3600多个常用字.
代码实现如下:
public class CreateCheckCode {
/**
* 生成随机汉字
* @return
*/
public 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, "GB2312");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return str.charAt(0);
}
public static void main(String[] args) {
char[] words = new char[4];
for (int i = 0; i<words.length; i++) {
words[i] = getRandomChar();
}
System.out.println(words);
}
}
测试结果如下,运行代码得到一个4个字的随机汉字
: