web-dev-qa-db-ja.com

JavaにA〜Zおよび0〜9のランダムな文字列を作成する

タイトルが示すように、17文字のランダムなIDを作成する必要があります。 「AJB53JHS232ERO0H1」のようなもの。文字と数字の順序もランダムです。 A〜Zの文字と1-2にランダムな 'check'変数を使用して配列を作成することを考えました。そしてループで。

Randomize 'check' to 1-2.
If (check == 1) then the character is a letter.
Pick a random index from the letters array.
else
Pick a random number.

しかし、私はこれを行う簡単な方法があると感じています。ある?

52
cbt

ここでは、ランダム文字列を生成するための私の方法を使用できます

protected String getSaltString() {
        String SALTCHARS = "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
        StringBuilder salt = new StringBuilder();
        Random rnd = new Random();
        while (salt.length() < 18) { // length of the random string.
            int index = (int) (rnd.nextFloat() * SALTCHARS.length());
            salt.append(SALTCHARS.charAt(index));
        }
        String saltStr = salt.toString();
        return saltStr;

    }

ログイン用のソルト文字列を生成するために使用している私のバッグから上記のメソッド。

97
Suresh Atta

RandomStringUtils Apache commons-langから:

RandomStringUtils.randomAlphanumeric(17).toUpperCase()

2017 updateRandomStringUtilsは廃止されました。今では RandomStringGenerator を使用する必要があります。

72
user180100

関数を実装するための3つのステップ:

Step#1文字A〜Zおよび0〜9を含む文字列を指定できます。

好む。

 String candidateChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";

Step#2次に、この候補文字列からランダムな文字を生成したい場合。使用できます

 candidateChars.charAt(random.nextInt(candidateChars.length()));

Step#最後に、生成するランダム文字列の長さを指定します(説明では17です)。 forループを作成し、手順2で生成されたランダムな文字をStringBuilderオブジェクトに追加します。

これに基づいて、パブリッククラスRandomTest {

public static void main(String[] args) {

    System.out.println(generateRandomChars(
            "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890", 17));
}

/**
 * 
 * @param candidateChars
 *            the candidate chars
 * @param length
 *            the number of random chars to be generated
 * 
 * @return
 */
public static String generateRandomChars(String candidateChars, int length) {
    StringBuilder sb = new StringBuilder();
    Random random = new Random();
    for (int i = 0; i < length; i++) {
        sb.append(candidateChars.charAt(random.nextInt(candidateChars
                .length())));
    }

    return sb.toString();
}

}
10
MouseLearnJava

これはforループで簡単にできますが、

public static void main(String[] args) {
  String aToZ="ABCD.....1234"; // 36 letter.
  String randomStr=generateRandom(aToZ);

}

private static String generateRandom(String aToZ) {
    Random Rand=new Random();
    StringBuilder res=new StringBuilder();
    for (int i = 0; i < 17; i++) {
       int randIndex=Rand.nextInt(aToZ.length()); 
       res.append(aToZ.charAt(randIndex));            
    }
    return res.toString();
}
4
Masudul