Cómo generar aleatoriamente una cadena en lenguaje Java
GUID es un número con una longitud de 128 bits, generalmente representado por 16 hexadecimal. La idea central de este algoritmo es combinar la tarjeta de red de la máquina, la hora local y un número aleatorio para generar un GUID. En teoría, si una máquina genera 10.000.000 GUID por segundo, se puede garantizar (en sentido probabilístico) que no se repetirán durante 3240 años.
UUID es la nueva clase en 1.5. En java.util, se puede utilizar para generar una identificación única en el mundo.
Importar Java . util . uuid;
Prueba de clase pública {
Public static void main(String[] args) {
UUID uuid = uuid aleatorio();
sistema fuera . Y ejecute la salida:
07c a3 dec-b674-41d 0-af9e-9c 37583 b 08 bb
Dos métodos para generar guid y uuid
Requerido Biblioteca de registros de comunicaciones.
/**
* @authoradmin
*
* TODO Para cambiar la plantilla para esta anotación de tipo generada, vaya a
*Plantilla de código de estilo de código Java de preferencias de ventana
*/
Importar dirección de red .inet de Java
Importar Java.net.unknownhostexception;
Importar Java.security.message digest;
Importar Java.security.nosuchalgorithmexception;
Importar seguridad Java.
Importar Java .util .
La clase pública RandomGUID extiende el registro de registro de Apache Commons protegido. .comunes .loging factory
. get log(getClass());
Cadena pública valueBeforeMD5 =
Cadena pública valueAfterMD5 =
Privada estática aleatoria Myland;
privada static SecureRandom mySecureRand;
Cadena estática privada s_id
privada static final int PAD _ BELOW = 0x 10;
privada static final int TWO _ BYTES = 0x ff ;
/*
* El bloque estático maneja una semilla aleatoria segura de una sola vez.
*Se necesitan unos segundos para inicializar SecureRandom. Es posible que
* desees considerar eliminar este bloque estático o reemplazarlo
* con una semilla de "tiempo desde la primera carga" para reducir este tiempo.
*Este bloque se ejecuta solo una vez por instancia de JVM.
*/
static {
mySecureRand = new SecureRandom();
inicializador seguro largo = mysecurerand nextlong();
mi rand = new Random(inicializador seguro);
Pruebe {
s_id = InetAddress.getLocalHost(). toString();
} catch (UnknownHostException e) {
e . printstacktrace();
}
}
/*
*Constructor predeterminado. Dado que no se especifican opciones de seguridad,
* este constructor tiene por defecto baja seguridad y alto rendimiento.
*/
público RandomGUID() {
getRandomGUID(false);
}
/*
*Constructor con opciones de seguridad. Establecer la seguridad en verdadero
* permite cifrar fuertemente cada número aleatorio generado
*. El valor predeterminado seguro es el valor inicial de una función aleatoria estándar
*Usando un número aleatorio criptográficamente fuerte.
*/
público RandomGUID(seguridad booleana){
getRandomGUID(seguridad);
}
/*
*Método para generar un GUID aleatorio
*/
Private void getRandomGUID (booleano seguro){
MessageDigest md5 = null
búfer de cadena sbvaluebefore MD5 = nuevo búfer de cadena(128);
Pruebe {
MD5 = resumen de mensaje getinstance(" MD5 "); p >
} catch(no existe tal excepción de algoritmo e){
logger Error(" Error:"+e);
}
Intenta {.
largo tiempo = sistema . hora actual milis();
largo rand = 0;
si (seguro){
rand = mysecurerand . nextlong();
} En caso contrario {
rand = my rand . nextlong()
}
sbvaluebeformd5 . append(s_id);
sbvaluebeformd5 . append(:");
sbvaluebeformd5 .append(long . tostring(time));
sbvaluebeformd5 .append (":");
sbvaluebeformd5 .append(long .tostring(rand));
valor antes de MD5 = sbvaluebefore MD5 .tostring();
MD5 . update(valor antes de MD5 . getbytes());
byte[]array = MD5 . digest();
búfer de cadena sb = nuevo búfer de cadena(32); p>
for(int j = 0; j & lt array.length; ++j) {
int b = array[j]& amp; dos bytes;
> p>
if(b & lt;PAD_BELOW)
sb . append(' 0 '
sb . /p>
p>
}
valueAfterMD5 = sb . tostring();
} catch (Excepción e) {
logger. Error(" Error:" +e);
}
}
/*
*Convertir al formato estándar de GUID
*(Útil para identificadores únicos de SQL Server, etc.
)
*Ejemplo: tarifa C2 EAC-CFCD-11d 1-8b 05-00600806 d9b 6
*/
Cadena pública toString() {< / p>
string raw = valueaftermd5 . toupper case();
búfer de cadena sb = nuevo búfer de cadena(64);
sb.append(raw.substring(0, 8));
Alguien agrega ("-");
sb.append(raw.substring(8, 12));
Alguien Alguien agrega ("-");
sb.append(raw.substring(12,16));
Alguien agrega ("-");
sb append(raw . substring(16, 20));
Alguien agrega ("-");
sb . >
return sb . tostring();
}
//Demostración y autoprueba de la clase
Public static void main( String args []) {
for(int I = 0;i<100;i++) {
guid aleatorio mi guid = nuevo guid aleatorio();
sistema. out . println(" Seeding String = "+mi guid . valor antes de MD5);
system out(" raw guid = "+mi guid . valor después de MD5);
system . println(" guid aleatorio = "+mi guid . tostring()
}
}
}