Random () Como generar un numero de 13 dígitos aleatoriamente con random

Hola que tal estoy realizando una aplicación en Java que genera códigos de barras de X productos y se me ha presentado un problema, el caso es que tengo un botón con el cual quiero generar un numero aleatorio de 13 dígitos y después en base a ese numero realizar el código de barras, hasta el momento solo he podido generar un numero de 9 dígitos y nada mas y también que cada vez que presione el botón me genere un numero diferente que el anterior, he buscado en Internet pero no he encontrado nada ya voy para 2 días y es frustrante espero que alguno de ustedes me pueda ayudar u orientar.

Saludos.

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de ezamudio

pues...

genera uno de 9 y luego uno de 3 y luego los concatenas ;)

Ese límite que tienes de 9, es porque es un int? Usa un long en vez de int, esos pueden medir hasta 19 dígitos (18 si quieres llegar hasta el 999999999999999999). O simplemente genera 9 caracteres del 0 al 9, o dos enteros, uno que vaya del 1 al 9999 y otro del 1 al 99999 y los concatenas...

Aleatorio de 13

Lo que no me gusta es que tenga que crearse un numero, convertirlo a string, recortarlo y finalmente pasarlo de nuez a numero;

new Long (String.valueOf (new Random().nextLong()).substirng (6))
Imagen de ezamudio

límites

Si quieres números exactamente de X dígitos entonces súmale siempre esa cantidad y pide como límite la siguiente potencia de 10:

//3 digitos
int dig3 = rng.nextInt(900)+100; //siempre 3 digitos
int dig5 = rng.nextInt(90000)+10000; //siempre 5 digitos
long dig13 = rng.nextLong(9000000000000L)+1000000000000L; //siempre 13 digitos

Pero si los quiere para código de barras, invariablemente al momento de imprimirlos o desplegarlos para escanearse, se va a convertir en cadena ese número. La diferencia está en cómo lo quieren almacenar (si es que va a dar a una base de datos, seguramente sí) y qué tipo de dato espera el componente que genera el código de barras (long, o String)

Problema con nextLong(Long)

Si rng es java.util.Random hay un problema, ese método no recibe ningun parametro, por lo que no se puede limitar el numero máximo que retorna al generar el aleatorio.

para la suma me parece que seria sumarle tantos nueves como posisiones se requieran -1

ejemplo (tomando lo de ezamudio):

int dig3 = rng.nextInt(900)+99; //siempre 3 digitos

por si alguna razon el umero aleatorio es 900, al sumar el resultado no seria 1000
 
 


Editado
Ooops, ya leí que el limite del aleatorio es exclusivo, osea que no se incluye en los numeros que pueda generar
http://docs.oracle.com/javase/6/docs/api/java/util/Random.html#nextInt%2...
Imagen de ezamudio

cierto

Pensé que había un nextLong(limit) pero no, solamente hay para nextInt(). Pero bueno, necesitas 44 bits para representar el long 9999999999999 así que bien podrías crear un arreglo de 6 bytes, hacer rng.nextBytes(arr), poner en cero los 4 bits más significativos del primer byte del arreglo, y finalmente construir un long a partir de esos bytes; y si te sale mayor a 9999999999999 pues lo cortas como quieras (dividirlo, restarle algo, etc).