Criar String Randomica

Pessoal.

Preciso criar uma String randomica com 20 posições (alfa-numerico).

Já estou testando o java.util.random, mas só consegui que ele crie com 16 posições…

Alguém sabe se tem como aumentar o numero de caracteres ?

OU alguém pode me dar alguma idéia ou exemplo pra fazer isso ?

Segue meu codigo

String cod = String.valueOf(Long.toHexString(rand.nextLong()))

Muito Obrigado.

Rodrigo

Rodrigo,

Fiquei matutando aqui, e cheguei nisso, veja se resolve ou pelo menos ajuda.

java.util.Random r = new java.util.Random();
		byte[] bytes = new byte[20];
		
		r.nextBytes(bytes);
		
		for(byte i : bytes)
			System.out.print((char)(i<0?i*-1:i) + " - ");

Abs,

Bruno Tafarelo

toHexString só vai retornar 16 mesmo pois pega os valores Hexadecimais.

Valeu Bruno.

Mas teste seu está me retornando caracteres especiais também, vou ver se altero aqui pra retornar só de 0-9 e de A-Z

abs

[quote=btafarelo]Rodrigo,

Fiquei matutando aqui, e cheguei nisso, veja se resolve ou pelo menos ajuda.

java.util.Random r = new java.util.Random();
		byte[] bytes = new byte[20];
		
		r.nextBytes(bytes);
		
		for(byte i : bytes)
			System.out.print((char)(i<0?i*-1:i) + " - ");

Abs,

Bruno Tafarelo[/quote]

Tente isso acho que resolve o seu problema também

UUID uuid = UUID.randomUUID();
String myRandom = uuid.toString();
System.out.println(myRandom.substring(0,20));

Essi dai gera um código de 128 bits oq eh dificil de repetir.
caso queira completo só retirar o substring

http://www.random.org/strings/?num=10&len=8&digits=on&upperalpha=on&loweralpha=on&unique=on&format=html&rnd=new

Random.org gera números randômicos baseados em ruídos atmosféricos, os números randômicos gerados matematicamente são psudo-randômicos.

http://www.random.org/clients/http/#strings

Rodrigo,

Realmente tinha notado isso, mas como tava meio sem tempo na hora, passei assim.

Mas como um bom problema não tem hora para solução, veja se esse resolve:

int random;
		boolean v = false;

		for(int i = 0; i<20; i++) {
			v = false;
		
			do {
				random = (int) (Math.random() * 122);
				
				if (random >= 48 && random <= 57)
					v = true;
				else if (random >= 97 && random <= 122)
					v = true;
				else if (random >= 65 && random <= 90)
					v = true;
			} while (!v);
			
			System.out.print((char) random + " - ");
		}

Abs,

Bruno Tafarelo

Valeu Galera…

Acho que assim já dá pra me virar…

abs

Novidades…

Utilizando o UUID e fazendo o substring pra 20 posições, ele começou a repetir depois dos 2.000.000…

[]´s

Rodrigo

Boa tarde a todos, estava com a mesma necessidade de gerar uma string randomica, desenvolvi uma solução a partir de algumas outras existentes que encontrei na internet, segue abaixo para caso alguém precise. Da até pra melhorar um pouco criando um método que incrementa os caracteres permitidos, não fiz pq não demando isso agora … mas acredito que será útil para alguém ehehhee …

[code]/**
*

  • @author Jayr Motta

*/
public class VerificationCode {

private String verificationCode;

/*
 * This define the default length of verification code
 */
private int length = 12;

/*
 * Here is the allowed characters in the verification code
 */
private char[] allowedCharacters = {'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'};

public VerificationCode() {
	
	this.setVerificationCode(this.generateVerificationCode());
	
}

/*
 * This constructor set the length of the verification code
 */
public VerificationCode(int length) {
	
	this.setLength(length);
	this.setVerificationCode(this.generateVerificationCode());
	
}

/*
 * This core method generate the verification code and return him
 */
private String generateVerificationCode() {

	String tmp = "";
	
	for (int i = 0; i < this.getLength(); i++) {
		
		int c = (int) Math.floor(Math.random()*this.getAllowedCharacters().length);
		
		tmp += this.getAllowedCharacters()[c];
		
	}
	
	return tmp;
	
}

private String getVerificationCode() {
	
	return verificationCode;
	
}

private void setVerificationCode(String verificationCode) {
	
	this.verificationCode = verificationCode;
	
}

private int getLength() {
	
	return length;
	
}

private void setLength(int length) {
	
	this.length = length;
	
}

public String toString() {
	
	return this.getVerificationCode();
	
}

private char[] getAllowedCharacters() {
	
	return allowedCharacters;
	
}

}
[/code]

vlwww!! :stuck_out_tongue:

Para que vai servir essa string?
Se for para representar um código, é melhor usar um processo numérico que gere uma String que também não se repete.

[quote=ViniGodoy]Para que vai servir essa string?
Se for para representar um código, é melhor usar um processo numérico que gere uma String que também não se repete.[/quote]

Porque você não postou então? Eu fiz esse porque vc pode delimitar o tamanho, é random e está pronto. Tentando ajudar só, entende? ^^

Estava falando com o autor do tópico. Não me referia ao que você postou, nem fiz qualquer crítica em relação a sua atitude.
Só queria saber se uma String totalmente aleatória como a sua basta, ou se a idéia é usar num desses códigos de atendimento de telemarketing.

Ah, só comentando. A lógica para gerar uma String “aleatória aos olhos do usuário” é a seguinte:

  1. Pegue um long sequencial (pode ser o ID do seu BD para aquele registro da ocorrência);
  2. Inverta todos os seus bits;
  3. Converta a base numérica dele para uma base estranha. Eu geralmente uso a base com os dígitos 0123456789ABCDEFGHJKLMNPRTUVWXY. Uso essa base pois evita confusões do 0 com a letra O, do 1 com a letra I, do 5 com a letra S, etc.

As sequencia fica completamente maluca. E facilmente conversíveis. E com 100% de garantia que nunca se repetirá.

1 curtida

Fala galera,

Deram um Up neste topico eim… hehe

Eu estava usando a String para gerar IDs unicos para produtos em uma cadeia de suprimentos, por isso ela não poderia ser sequencial e nem apenas numérica.

Pra adequar ao meu caso e ter algum controle serial, passei a utilizar o UUID mas controlando o inicio da String, fazendo um “versionamento”…

Abs