seticon java uniqueidentifier

seticon - text field java



¿Cómo creo una identificación única en Java? (12)

Aquí está mi valor de dos centavos: Anteriormente implementé una clase IdFactory que creaba ID en el formato [nombre de host] - [hora de inicio de la aplicación] - [hora actual] - [discriminador] . Esto garantizaba en gran medida que los ID eran únicos en todas las instancias de JVM a la vez que se mantenían legibles los ID (aunque bastante largos). Aquí está el código en caso de que sea de alguna utilidad:

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

Esta pregunta ya tiene una respuesta aquí:

Estoy buscando la mejor manera de crear una ID única como una cadena en Java.

Cualquier orientación apreciada, gracias.

Debo mencionar que estoy usando Java 5.


Crea un UUID .

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


Esto agrega un poco más de aleatoriedad a la generación de UUID, pero asegura que cada ID generada tenga la misma longitud

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


Hay tres formas de generar identificador único en java.

1) la clase UUID proporciona un medio simple para generar identificadores únicos.

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

2) SecureRandom y 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) usando un java.rmi.server.UID

UID userId = new UID(); System.out.println("userId: " + userId);


Java - Generar ID único

UUID es la forma más rápida y sencilla de generar identificaciones únicas en Java.

import java.util.UUID; public class UniqueIDTest { public static void main(String[] args) { UUID uniqueKey = UUID.randomUUID(); System.out.println (uniqueKey); } }


Los aperkins de IMHO proporcionaron una solución elegante porque la causa es nativa y usa menos código. Pero si necesita una identificación más corta, puede utilizar este enfoque para reducir la longitud de cadena generada:

// 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'', ''-'',''.'',''_'',''~'' }; }



Podemos crear una ID única en java utilizando el UUID y llamar al método como randomUUID() en UUID .

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

Esto generará el uniqueID aleatorio cuyo tipo de devolución será String .


Si desea ID cortos, legibles para el ser humano, y solo necesita que sean únicos por ejecución JVM:

private static long idCounter = 0; public static synchronized String createID() { return String.valueOf(idCounter++); }

Editar: Alternativa sugerida en los comentarios: esto se basa en la "magia" bajo la cubierta para la seguridad del hilo, pero es más escalable e igual de segura:

private static AtomicLong idCounter = new AtomicLong(); public static String createID() { return String.valueOf(idCounter.getAndIncrement()); }


Identificación única con información de conteo

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

Programa para generar identificaciones únicas

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

Salida:

7954-7605-1827-4795 1991-4912-4912-3008