Comment créer un ID unique en Java? [dupliquer]

cette question a déjà une réponse ici:

  • Créer un GUID en Java 6 réponses

je suis à la recherche de la meilleure façon de créer un ID unique en tant que chaîne de caractères en Java.

tous conseils appréciés, merci.

je dois mentionner que j'utilise Java 5.

131
demandé sur Supertux 2009-09-07 18:48:31

12 réponses

créer un UUID .

String uniqueID = UUID.randomUUID().toString();
275
répondu aperkins 2016-01-05 09:15:29

si vous voulez des IDs courts, lisibles par l'utilisateur et n'avez besoin que d'être uniques par JVM run:

private static long idCounter = 0;

public static synchronized String createID()
{
    return String.valueOf(idCounter++);
}    

Edit: Alternative suggérée dans les commentaires - cela repose sur la "magie" sous le capot pour la sécurité du fil, mais est plus évolutif et tout aussi sûr:

private static AtomicLong idCounter = new AtomicLong();

public static String createID()
{
    return String.valueOf(idCounter.getAndIncrement());
}
41
répondu Michael Borgwardt 2009-09-07 15:38:08

java.util.UUID : méthode toString () 151940920"

22
répondu Mitch Wheat 2009-09-07 14:50:09

Voici la valeur de mes deux cents: j'ai déjà implémenté une classe IdFactory qui a créé des IDs dans le format [nom d'hôte]-[Heure de début de la demande]-[heure actuelle]-[discriminateur] . Cela garantissait en grande partie que les IDs étaient uniques dans toutes les instances de JVM tout en gardant les IDs lisibles (quoique assez longs). Voici le code au cas où il serait d'une utilité quelconque:

public class IdFactoryImpl implements IdFactory {
  private final String hostName;
  private final long creationTimeMillis;
  private long lastTimeMillis;
  private long discriminator;

  public IdFactoryImpl() throws UnknownHostException {
    this.hostName = InetAddress.getLocalHost().getHostAddress();
    this.creationTimeMillis = System.currentTimeMillis();
    this.lastTimeMillis = creationTimeMillis;
  }

  public synchronized Serializable createId() {
    String id;
    long now = System.currentTimeMillis();

    if (now == lastTimeMillis) {
      ++discriminator;
    } else {
      discriminator = 0;
    }

    // creationTimeMillis used to prevent multiple instances of the JVM
    // running on the same host returning clashing IDs.
    // The only way a clash could occur is if the applications started at
    // exactly the same time.
    id = String.format("%s-%d-%d-%d", hostName, creationTimeMillis, now, discriminator);
    lastTimeMillis = now;

    return id;
  }

  public static void main(String[] args) throws UnknownHostException {
    IdFactory fact = new IdFactoryImpl();

    for (int i=0; i<1000; ++i) {
      System.err.println(fact.createId());
    }
  }
}
16
répondu Adamski 2009-09-07 15:15:51

cela ajoute un peu plus de caractère aléatoire à la génération UUID mais garantit que chaque id généré est de la même longueur

import org.apache.commons.codec.digest.DigestUtils;
import java.util.UUID;

public String createSalt() {
    String ts = String.valueOf(System.currentTimeMillis());
    String rand = UUID.randomUUID().toString();
    return DigestUtils.sha1Hex(ts + rand);
}
7
répondu Robert Alderson 2016-07-06 03:06:52

Java – Générer des ID Unique

UUID est le moyen le plus rapide et le plus facile de générer un ID unique en Java.

import java.util.UUID;

public class UniqueIDTest {
  public static void main(String[] args) {
    UUID uniqueKey = UUID.randomUUID();
    System.out.println (uniqueKey);
  }
}
6
répondu pudaykiran 2013-01-19 20:15:04

IMHO aperkins fourni une solution élégante cause est natif et utiliser moins de code. Mais si vous avez besoin d'un ID plus court, vous pouvez utiliser cette approche pour réduire la longueur de chaîne générée:

// usage: GenerateShortUUID.next();
import java.util.UUID;

public class GenerateShortUUID() {

  private GenerateShortUUID() { } // singleton

  public static String next() {
     UUID u = UUID.randomUUID();
     return toIDString(u.getMostSignificantBits()) + toIDString(u.getLeastSignificantBits());
  }

  private static String toIDString(long i) {
      char[] buf = new char[32];
      int z = 64; // 1 << 6;
      int cp = 32;
      long b = z - 1;
      do {
          buf[--cp] = DIGITS66[(int)(i & b)];
          i >>>= 6;
      } while (i != 0);
      return new String(buf, cp, (32-cp));
  }

 // array de 64+2 digitos 
 private final static char[] DIGITS66 = {
    '0','1','2','3','4','5','6','7','8','9',        'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z',
    'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z',
    '-','.','_','~'
  };

}
6
répondu rharari 2013-06-04 02:23:13

nous pouvons créer un ID unique en java en utilisant le UUID et appeler la méthode comme randomUUID() sur UUID .

String uniqueID = UUID.randomUUID().toString();

cela générera le uniqueID aléatoire dont le type de retour sera String .

2
répondu Prabhat 2017-11-22 15:40:43

il y a trois façons de générer un id unique en java.

1) la classe UUID fournit un moyen simple de générer des identifiants uniques.

 UUID id = UUID.randomUUID();
 System.out.println(id);

2) SecureRandom et MessageDigest

//initialization of the application
 SecureRandom prng = SecureRandom.getInstance("SHA1PRNG");

//generate a random number
 String randomNum = new Integer(prng.nextInt()).toString();

//get its digest
 MessageDigest sha = MessageDigest.getInstance("SHA-1");
 byte[] result =  sha.digest(randomNum.getBytes());

System.out.println("Random number: " + randomNum);
System.out.println("Message digest: " + new String(result));

3) utilisant un java.rmi.serveur.UID

UID userId = new UID();
System.out.println("userId: " + userId);
0
répondu Md Ayub Ali Sarker 2017-10-10 19:47:55

ID Unique avec l'information de comptage

import java.util.concurrent.atomic.AtomicLong;

public class RandomIdUtils {

    private static AtomicLong atomicCounter = new AtomicLong();

    public static String createId() {

        String currentCounter = String.valueOf(atomicCounter.getAndIncrement());
        String uniqueId = UUID.randomUUID().toString();

        return uniqueId + "-" + currentCounter;
    }
}
0
répondu simhumileco 2017-11-22 16:14:11
String name,password;

public int idGen() {

    int id = this.name.hashCode() + this.password.hashCode();
    int length = String.valueOf(id).length();
    int Max_Length = 5;
    if(String.valueOf(id).length()>Max_Length) 
    {
        id = (int) (id /Math.pow(10.0,length - Max_Length ));
    }
    return  id;
}
0
répondu Hatim 2017-12-26 19:50:33
enter code here

programme pour générer des identifiants uniques

class Test {

    public static void main(String arg[]) {

        String s = "";
        double d;
        for (int i = 1; i <= 16; i++) {
            d = Math.random() * 10;
            s = s + ((int)d);
            if (i % 4 == 0 && i != 16) {
                s = s + "-";
            }
        }

        System.out.println(s);
    }
}

sortie:

7954-7605-1827-4795
1991-4912-4912-3008
-5
répondu jonathan 2015-11-12 11:16:11