10
votes

8 caractères unique en java

Y a-t-il un moyen de générer 8 caractères de longue chaîne aléatoire et unique en Java? xxx

, puis ID sera par exemple wf41av5g


2 commentaires

Pas si vous voulez plus de 62 ^ 8 d'entre eux (en supposant que vous voulez des alphanumériques uniquement) ... Vous voulez probablement une chaîne aléatoire, puis recherchez une table de chaînes déjà générées.


Définir "unique": chaque fois que la méthode est exécutée, une chaîne différente est renvoyée? Ou tous les caractères sont différents les uns des autres? autre chose?


12 Réponses :


13
votes

La propriété la propriété dépend de la portée dans laquelle vous l'utilisez. Java peut certainement générer des chaînes aléatoires, bien que si vous voulez un identifiant universellement universellement unique , vous pouvez utiliser uuid classe. xxx


3 commentaires

C'est bon mais j'ai besoin de 8 caractères seulement, sinon je l'utiliserais sans doute.


Les uuids sont structurés; Leurs champs sont générés de manière particulière et tous les bits sont également uniques. Cela signifie que vous ne pouvez pas simplement trancher des morceaux aléatoires et vous attendre à ce qu'ils restent uniques. Voir le commentaire de Danny sur La réponse de Oliver pour une illustration de ce problème en action.


@danny, I.e., chaîne huitchars = unique.Substring (28);



1
votes
public String getRandomString(int length, char[] characterSet) {
    StringBuilder sb = new StringBuilder();

    for (int loop = 0; loop < length; loop++) {
        int index = new Random().nextInt(characterSet.length);
        sb.append(characterSet[index]);
    }

    String nonce = sb.toString();
    return nonce;
}

0 commentaires

0
votes

solution rapide et sale à l'aide de java.util.uuid : xxx


1 commentaires

Je l'ai généré deux fois et FF808181328864BA01328864BC590000 et FF808181328864BA02328864BC5902300. Si je ne prends que 8 premiers caractères, je vais avoir la même chaîne :(



0
votes

Veuillez essayer le code suivant: xxx


1 commentaires

Je crois que cela ne assez fait la bonne chose, car de long. Cependant, vous pouvez étendre le code aux cordes courtes zéro au lieu de les couper.





4
votes

Vous pouvez créer cette chaîne à la base de l'heure actuelle.

Par exemple:

2014 06 04 16 21 20 79 ---> 14 06 04 16 21 20 79

Ensuite, vous pouvez traduire tous les deux chiffres (à l'exception des deux derniers) pour un caractère alphanumérique à l'aide de la table ( http: / /en.wikipedia.org/wiki/base64 - Notez que tous sont plus petits que 59)

alors vous recevrez

14 - O
06 - G
04 - e
16 - q
21 - V
20 - u

ogeqvu79 <- exactement 8 caractères. Un peu compliqué, mais cela fonctionne si vous n'appeleriez pas votre fonction souvent à 0,01 s


1 commentaires

Cela ne garantit pas l'unicité - Pensez à des threads simultanés ou même à un seul fil qui le faisait à plusieurs reprises dans une succession très rapide



0
votes

Aujourd'hui, vous devez avoir votre réponse, mais pour ceux qui atteignent cette page, essayez ce code:

public class RandomValueXML {

    public static void main(String[] args) {
        
        System.out.println(org.apache.commons.lang3.RandomStringUtils.random(6, true, true)); 

    }
    
    static Set<String> getRandomUniqueStrings(int count, int length, boolean letters, boolean numbers){
        Set<String> rus = new HashSet<>();
        
        while (rus.size() < count){
            rus.add(RandomStringUtils.random(length, letters, numbers));
        }
        
        return rus;
    } 
}


1 commentaires

Veuillez noter que la réponse acceptée est ce que vous suggérez. Ajoutez-vous sur le dessus? Veuillez prendre le tour et lire Comment Répondre .



-2
votes
long unixTime = System.currentTimeMillis() / 1000L;
String unique_no=Long.toHexString(unixTime).toUpperCase();
gives you unique 8 chars String in HEX format.  

1 commentaires

Pas unique si vous appelez plus d'une fois une seconde, et certainement pas aléatoire!



0
votes

Je sais que c'est un ancien poste, mais cela peut aider quelqu'un.

Celui-ci a travaillé pour moi: p>

public class UniqueIdGenerator {

 private static final String MIX_STRING = "abcdefghijklmnopqrstuvwxyz1234567890";

 private static final int MIX_STRING_LENGTH = MIX_STRING.length();

 public static String fromBase10(final long base10) {
    if (base10 == 0)
        return "0";

    long temp = base10;
    final StringBuilder sb = new StringBuilder();

    while (temp > 0) {
        temp = fromBase10(temp, sb);
    }
    return sb.reverse().toString();
 }

 private static Long fromBase10(final long base10, final StringBuilder sb) {
    final int rem = (int) (base10 % MIX_STRING_LENGTH);
    sb.append(MIX_STRING.charAt(rem));
    return base10 / MIX_STRING_LENGTH;
 }
}


0 commentaires

0
votes

Je n'ai aucune idée s'il existe une méthode qui peut produire une chaîne aléatoire unique à 8 chiffres, mais je créerais un service de générateur de clé hors ligne qui génère constamment des touches aléatoires et les insérez-les à la table des clés si la clé n'existe pas dans La table et chaque fois que votre application en ligne a besoin d'une touche, elle peut extraire l'une des touches préformées.


1 commentaires

Bonjour et bienvenue à tellement! Veuillez lire le Tour et Comment faire J'écris une bonne réponse? Je ne pense pas que c'est ce que le PO a demandé.



1
votes

Comme aucune des réponses ci-dessus assure l'unicité, j'ai décidé d'ajouter une autre réponse. strong>

Tout d'abord, nous définissons toutes les options valides dans un tableau: P>

ifJjuYrR
NpY3TfIU
LGFm8Ng9
sV4Gctb7
4fyhlSuQ


0 commentaires