222 votes

Méthode efficace pour générer une chaîne UUID en JAVA (UUID.randomUUID (). ToString () sans les tirets)

Je voudrais un utilitaire efficace pour générer des séquences uniques d'octets. UUID est un bon candidat, mais UUID.randomUUID().toString() génère des éléments tels que 44e128a5-ac7a-4c9a-be4c-224b6bf81b20 ce qui est utile tant que vous n'avez pas besoin de le transmettre via http. Dans ce cas, les tirets doivent être supprimés.

Je cherche un moyen efficace de générer des chaînes aléatoires, uniquement à partir de caractères alphanumériques (sans tirets ni autres symboles spéciaux).

Merci d'avoir aidé, Maxim.

359voto

Steve McLeod Points 19016

Cela le fait:

 public static void main(String[] args) {
    final String uuid = UUID.randomUUID().toString().replaceAll("-", "");
    System.out.println("uuid = " + uuid);
}
 

Mais je ne comprends pas très bien pourquoi vous voulez supprimer les tirets.

36voto

Donz Points 592

Les tirets ne doivent pas être supprimés de la requête HTTP, comme vous pouvez le voir dans l'URL de ce fil. Mais si vous souhaitez préparer une URL bien formée sans dépendance aux données, vous devez utiliser URLEncoder.encode (String data, String encoding) au lieu de modifier le format standard de vos données. Pour les UUID, la représentation des chaînes est normale.

16voto

Sheng Chien Points 261

J'ai utilisé JUG (Java UUID Generator) pour générer un identifiant unique. Il est unique parmi les machines virtuelles. Assez bon à utiliser. Voici le code pour votre référence:

 private static final SecureRandom secureRandom = new SecureRandom();
private static final UUIDGenerator generator = UUIDGenerator.getInstance();

public synchronized static String generateUniqueId() {
  UUID uuid = generator.generateRandomBasedUUID(secureRandom);

  return uuid.toString().replaceAll("-", "").toUpperCase();
}
 

Vous pouvez télécharger la bibliothèque à l' adresse suivante : https://github.com/cowtowncoder/java-uuid-generator

14voto

Maxim Veksler Points 4231

Je voulais juste savoir que j'ai fini par écrire quelque chose de ma part (après avoir lu l'implémentation de UUID.java). Notez que je ne génère pas d'UUID , mais simplement une chaîne hex 32 octets aléatoire de la manière la plus efficace que je puisse imaginer.

 import java.security.SecureRandom;
import java.util.UUID;

public class RandomUtil {
    // Maxim: Copied from UUID implementation :)
    private static volatile SecureRandom numberGenerator = null;
    private static final long MSB = 0x8000000000000000L;

    public static String genRandom32Hex() {
        SecureRandom ng = numberGenerator;
        if (ng == null) {
            numberGenerator = ng = new SecureRandom();
        }

        return Long.toHexString(MSB | ng.nextLong()) + Long.toHexString(MSB | ng.nextLong());
    }

    public static void main(String[] args) {
        System.out.println(UUID.randomUUID().toString());
        System.out.println(RandomUtil.genRandom32Hex());

        System.out.println();
        System.out.println(Long.toHexString(0x8000000000000000L |21));
        System.out.println(Long.toBinaryString(0x8000000000000000L |21));
        System.out.println(Long.toHexString(Long.MAX_VALUE + 1));
    }
}
 

2voto

stikkos Points 342

J'utilise org.apache.commons.codec.binary.Base64 pour convertir un UUID en chaîne unique sécurisée par une URL d'une longueur de 22 caractères et possédant la même unicité qu'un UUID.

J'ai posté mon code sur le stockage de l'UUID en tant que base64 String

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X