Criar String Randomica

14 respostas
kleins

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

14 Respostas

B

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

shoko

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

kleins

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

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

shoko

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

Rafael_Nunes

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

B

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

kleins

Valeu Galera…

Acho que assim já dá pra me virar…

abs

kleins

Novidades…

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

[]´s

Rodrigo

jayrmotta

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 ..

/**
 * 
 * @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;
		
	}

}

vlwww!! :P

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.

jayrmotta

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.

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

ViniGodoy

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.

ViniGodoy

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á.

kleins

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

Criado 26 de junho de 2008
Ultima resposta 28 de jul. de 2010
Respostas 14
Participantes 6