12 ответов:
создать UUID.
String uniqueID = UUID.randomUUID().toString();
Если вы хотите короткие, удобочитаемые идентификаторы и только они должны быть уникальными для запуска JVM:
private static long idCounter = 0; public static synchronized String createID() { return String.valueOf(idCounter++); }Edit: альтернатива, предложенная в комментариях - это зависит от "магии" под капотом для потокобезопасности, но более масштабируемо и так же безопасно:
private static AtomicLong idCounter = new AtomicLong(); public static String createID() { return String.valueOf(idCounter.getAndIncrement()); }
java.util.UUID: метод toString ()
вот мои два цента стоит: я ранее осуществлял
IdFactoryкласс, который создал идентификаторы в формате [имя хоста] - [время запуска приложения] - [текущее время] - [дискриминатор]. Это в значительной степени гарантировало, что идентификаторы были уникальными в экземплярах JVM, сохраняя при этом идентификаторы читаемыми (хотя и довольно длинными). Вот код на случай, если он пригодится: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()); } } }
Это добавляет немного больше случайности к генерации UUID, но гарантирует, что каждый сгенерированный идентификатор имеет одинаковую длину
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); }
Java-генерировать уникальный идентификатор
UUID-это самый быстрый и простой способ создания уникального идентификатора в Java.
import java.util.UUID; public class UniqueIDTest { public static void main(String[] args) { UUID uniqueKey = UUID.randomUUID(); System.out.println (uniqueKey); } }
ИМХО aperkins при условии, что причина элегантного решения является родной и использует меньше кода. Но если вам нужен более короткий идентификатор, вы можете использовать этот подход для уменьшения длины генерируемой строки:
// 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', '-','.','_','~' }; }
мы можем создать уникальный идентификатор в Java с помощью
UUIDи вызовите метод какrandomUUID()onUUID.String uniqueID = UUID.randomUUID().toString();это будет генерировать случайный
uniqueIDчей тип возврата будетString.
существует три способа создания уникального идентификатора в java.
1) класс UUID предоставляет простые средства для генерации уникальных идентификаторов.
UUID id = UUID.randomUUID(); System.out.println(id);2) SecureRandom и 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) с помощью java.РМО.сервер.UID
UID userId = new UID(); System.out.println("userId: " + userId);
уникальный идентификатор с информацией о количестве
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; } }
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; }
enter code hereпрограмма для генерации уникальных идентификаторов
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); } }выход:
7954-7605-1827-4795 1991-4912-4912-3008
Comments