Javaでランダムパスワードを生成する
Javaでjava.util.Randomクラスを使用してパスワードを生成します。
12文字のランダムパスワードを生成します。
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
public class Hoge {
private static int COUNT = 12;
public static void main(String[] args) {
final StringBuilder sb = new StringBuilder(
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!#$%");
final Random rand = new Random();
final StringBuilder password = new StringBuilder();
IntStream.rangeClosed(0, 11).forEach(i -> {
final int num = rand.nextInt(sb.length());
password.append(sb.charAt(num));
});
System.out. println(password); // qQYXxQFxZEaB
}
}
ランダム12文字の文字列が生成されました。
条件付き(正規表現)
- 小文字アルファベットを含む
- 大文字アルファベットを含む
- 数字を含む
- 記号を含む
この条件を満たすパスワードを生成します。
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.stream.IntStream;
public class Hoge {
public static void main(String[] args) {
String password = null;
boolean a = true;
while (a) {
final List<Boolean> checks = new ArrayList<>();
password = pass(); // pass生成
checks.add(password.matches(".*[a-z].*"));
checks.add(password.matches(".*[A-Z].*"));
checks.add(password.matches(".*[0-9].*"));
checks.add(password.matches(".*[!#$%].*"));
a = !checks.stream().allMatch(e -> e.equals(Boolean.TRUE));
System.out.println(password);
}
}
public static String pass() {
final StringBuilder sb = new StringBuilder(
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!#$%");
final StringBuilder password = new StringBuilder();
final Random rand = new Random();
IntStream.rangeClosed(0, 11).forEach(i -> {
final int num = rand.nextInt(sb.length());
password.append(sb.charAt(num));
});
return password.toString();
}
}
Apache CommonsのRandomStringUtilsクラスでもランダム生成できるようです。
その他条件(正規表現)
その他、条件です。
| コード | 内容 |
|---|---|
| password.matches(“.@.“); | @を含む |
| password.matches(“^[A-Za-z0-9][.]$”); | 1文字目が英数字、2文字目がドットで終わる文字列 |
| password.matches(“^\.[A-Za-z0-9].*$”); | ドットから始まる任意の英数字の文字列 |
| password.matches(“^.{4,18}$”) | 4文字以上18文字以下 |
参考サイト

KHI入社して退社。今はCONFRAGEで正社員です。関西で140-170/80~120万から受け付けております^^
得意技はJS(ES6),Java,AWSの大体のリソースです
コメントはやさしくお願いいたします^^
座右の銘は、「狭き門より入れ」「願わくは、我に七難八苦を与えたまえ」です^^


コメント