Erstellen einer zufälligen Zeichenfolge mit AZ und 0-9 in Java [duplicate]

Lesezeit: 4 Minuten

Benutzer-Avatar
cbt

Wie der Titel schon sagt, muss ich eine zufällige, 17 Zeichen lange ID erstellen. Etwas wie “AJB53JHS232ERO0H1“. Die Reihenfolge der Buchstaben und Zahlen ist ebenfalls zufällig. Ich dachte daran, ein Array mit den Buchstaben AZ und einer ‘Check’-Variablen zu erstellen, die zufällig ausgewählt wird 1-2. Und in einer Schleife;

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.

Aber ich habe das Gefühl, dass es einen einfacheren Weg gibt, dies zu tun. Gibt es?

  • stackoverflow.com/questions/41107/…

    – Aquarag

    12. Dezember 2013 um 6:36 Uhr

  • Sie können Ihre Buchstaben und Ziffern in ein Array einfügen und dann zufällig Elemente daraus auswählen, bis Sie Ihre gewünschte Größe erreicht haben.

    – wxyz

    12. Dezember 2013 um 6:37 Uhr


Benutzer-Avatar
Sicher Atta

Hier können Sie meine Methode zum Generieren von Random String verwenden

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;

    }

Die obige Methode aus meiner Tasche wird verwendet, um eine Salzzeichenfolge für Anmeldezwecke zu generieren.

  • Darf ich vorschlagen zu ersetzen StringBuffer durch eine StringBuilder, es ist kein Thread-sicheres Impl erforderlich. hier

    Benutzer180100

    12. Dezember 2013 um 6:42 Uhr

  • Oder erstellen Sie einfach eine char[] vorausgesetzt, Sie wissen genau, wie lange es dauern wird. Es muss nichts angehängt werden. würde ich auch verwenden Random.nextInt anstatt anzurufen nextFloat und mit der Länge multipliziert.

    – Jon Skeet

    12. Dezember 2013 um 6:44 Uhr

  • Beachten Sie, dass die durchschnittliche Anzahl an Zahlen nicht der Anzahl an Buchstaben entspricht.

    – Martin Courteaux

    12. Dezember 2013 um 6:44 Uhr

  • @RC. Ja. Ich verwende es in einer Servlet-Umgebung. Brauche es also. Ansonsten ein StringBuilder

    – Suresh Atta

    12. Dezember 2013 um 6:47 Uhr

  • Eine Sache, die Sie beachten sollten, wenn Sie dies verwenden, ist, dass die Random-Klasse sudo random und kein echter Zufall ist. Ich habe versucht, dies zu verwenden, um 400 Zeichenfolgen in eine Datei zu drucken, und festgestellt, dass es nicht so zufällig war, wie ich wollte. 🙁

    – SharpInnovativeTechnologies

    26. Dezember 2018 um 1:46 Uhr

RandomStringUtils von Apache commons-lang könnte helfen:

RandomStringUtils.randomAlphanumeric(17).toUpperCase()

2017-Aktualisierung: RandomStringUtils veraltet ist, sollten Sie jetzt verwenden RandomStringGenerator.

  • Erwägen Sie, die Antwort zu aktualisieren, da Apache sie durch ersetzt hat RandomStringGenerator im Commons-Text.

    – Neria Nachum

    8. August 2017 um 8:23 Uhr

  • Sie können auch verwenden RandomStringUtils.random(length, useLetters, useNumbers) wo Länge ist int während useLetters und useNumbers sind boolesch Werte.

    – Pratik Patel

    22. September 2018 um 11:42 Uhr

  • Hervorragender, einzeiliger Code, wir benötigen diese Art von Codes.

    – Rajesh Om

    13. November 2018 um 7:41 Uhr

  • @NeriaNachum wo siehst du das RandomStringUtils wurde ersetzt/veraltet? Ich sehe nur “RandomStringUtils ist für einfache Anwendungsfälle gedacht. Für fortgeschrittenere Anwendungsfälle sollten Sie stattdessen den RandomStringGenerator von Apache Commons Text verwenden.” hier

    – Wileyquijote

    29. Mai 2020 um 14:20 Uhr


  • Mit RandomStringGenerator (von Apache Common) können Sie einen zufälligen String der gewünschten Länge erzeugen. Das folgende Snippet generiert eine Zeichenfolge mit einer Länge zwischen 5 und 15 (beide einschließlich) // Zeichen [][] Paare = {{‘a’,’z’},{‘A’,’Z’},{‘0′,’9’}}; RandomStringGenerator randomStringGenerator = new RandomStringGenerator.Builder() .withinRange(pairs) .build(); Zeichenfolge randomString = randomStringGenerator.generate (5, 15); //

    – Ajay Singh

    8. Juni um 10:28


Benutzer-Avatar
MouseLearnJava

Drei Schritte zur Implementierung Ihrer Funktion:

Schritt 1 Sie können eine Zeichenfolge angeben, einschließlich der Zeichen AZ und 0-9.

Wie.

 String candidateChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";

Schritt 2 Wenn Sie dann aus dieser Kandidatenzeichenfolge ein zufälliges Zeichen generieren möchten. Sie können verwenden

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

Schritt 3 Geben Sie zuletzt die Länge der zu generierenden Zufallszeichenfolge an (in Ihrer Beschreibung ist es 17). Schreiben Sie eine for-Schleife und hängen Sie die in Schritt 2 generierten zufälligen Zeichen an das StringBuilder-Objekt an.

Darauf basierend ist hier ein Beispiel für die öffentliche Klasse 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();
}

}

Das geht ganz einfach mit einer for-Schleife,

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();
}

1226800cookie-checkErstellen einer zufälligen Zeichenfolge mit AZ und 0-9 in Java [duplicate]

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy