需求
最近因为一个Android studio项目,需要简单的添加一个密码生成器,主要生成一个包含字母、数字和某些特殊字符的一个任意长度的随机密码序列供用户使用,其中字母、数字和特殊字符都可以通过SeekBar根据需求进行选择
实现
- 首先新建一个密码生成类PasswordCreate
- 初始化密码长度和密码包含类型:
private int pwd_len; //密码长度
private int signal; //密码包含类型设置标志
public void setPwd_len(int pwd_len) {
this.pwd_len = pwd_len;
}
public void setSignal(int signal) {
this.signal = signal;
}
其中signal参数表示三个SeekBar的开关状态,0为非选中状态,1为选中状态,通过0、1组合形成三位二进制数字,调用该类时转换成十进制形式传入
- 实现生成一个随机密码序列的方法:
public String getPassword() {
final int maxChar = 82; //密码序列包含的字符类型个数
int i;
int count = 0;
char[] str = {'a', 'A', 'b', 'B', 'c', 'C', 'd', 'D', 'e', 'E', 'f', 'F', 'g', 'G', 'h',
'H', 'i', 'I', 'j', 'J', 'k', 'K', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u',
'v', 'w', 'x', 'X', 'y', 'Y', 'z', 'Z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
'!', '#', '$', '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', '\'', '"',
':', ';', '<', '=', '>', '?', '@', '[', '\\', ']', '^', '_', '`', '{', '|', '}', '~'};
StringBuilder pwd = new StringBuilder("");
Random random = new Random();
switch (signal) {
case 0: //只含小写字母
while (count < pwd_len) {
i = Math.abs(random.nextInt(maxChar));
if (i >= 0 && i < str.length) {
if (str[i] >= 97 && str[i] <= 122) {
pwd.append(str[i]);
count++;
}
}
}
break;
case 1: //小写字母、字符
while (count < pwd_len) {
i = Math.abs(random.nextInt(maxChar));
if (i >= 0 && i < str.length) {
if (str[i] >= 97 && str[i] <= 122 || str[i] <= 47 || str[i] >= 58
&& str[i] <= 64 || str[i] >= 91 || str[i] <= 96 && str[i] >= 123) {
pwd.append(str[i]);
count++;
}
}
}
break;
case 2: // 小写字母、数字
while (count < pwd_len) {
i = Math.abs(random.nextInt(maxChar));
if (i >= 0 && i < str.length) {
if (str[i] >= 97 && str[i] <= 122 || str[i] >= 48 && str[i] <= 57) {
pwd.append(str[i]);
count++;
}
}
}
break;
case 3: //小写字母、数字、字符
while (count < pwd_len) {
i = Math.abs(random.nextInt(maxChar));
if (i >= 0 && i < str.length) {
if (str[i] >= 97 && str[i] <= 122 || str[i] >= 48 && str[i] <= 57
|| str[i] <= 47 || str[i] >= 58 && str[i] <= 64 || str[i] >= 91
&& str[i] <= 96 || str[i] >= 123) {
pwd.append(str[i]);
count++;
}
}
}
break;
case 4: //大小写字母
while (count < pwd_len) {
i = Math.abs(random.nextInt(maxChar));
if (i >= 0 && i < str.length) {
if (str[i] >= 65 && str[i] <= 90 || str[i] >= 97 && str[i] <= 122) {
pwd.append(str[i]);
count++;
}
}
}
break;
case 5: //大小写字母、字符
while (count < pwd_len) {
i = Math.abs(random.nextInt(maxChar));
if (i >= 0 && i < str.length) {
if (str[i] >= 65 && str[i] <= 90 || str[i] >= 97 && str[i] <= 122
|| str[i] <= 47 || str[i] >= 58 && str[i] <= 64 || str[i] >= 91
&& str[i] <= 96 || str[i] >= 123) {
pwd.append(str[i]);
count++;
}
}
}
break;
case 6: //大小写字母、数字
while (count < pwd_len) {
i = Math.abs(random.nextInt(maxChar));
if (i >= 0 && i < str.length) {
if (str[i] >= 65 && str[i] <= 90 || str[i] >= 97 && str[i] <= 122
|| str[i] >= 48 && str[i] <= 57) {
pwd.append(str[i]);
count++;
}
}
}
break;
case 7: //大小写字母、数字、字符
while (count < pwd_len) {
i = Math.abs(random.nextInt(maxChar));
if (i >= 0 && i < str.length) {
if (str[i] >= 65 && str[i] <= 90 || str[i] >= 97 && str[i] <= 122
|| str[i] >= 48 && str[i] <= 57 || str[i] <= 47 || str[i] >= 58
&& str[i] <= 64 || str[i] >= 91 && str[i] <= 96 || str[i] >= 123) {
pwd.append(str[i]);
count++;
}
}
}
break;
default:
}
return pwd.toString();
}
- 程序运行结果显示:
至此,一个简单的密码生成工具就全部实现了!