/*
* Copyright 2001-2013 Geert Bevin (gbevin[remove] at uwyn dot com)
* Licensed under the Apache License, Version 2.0 (the "License")
*/
package com.uwyn.rife.tools;
import java.util.Random;
public abstract class PasswordGenerator
{
public static final int DIGITS_ONLY = 0;
public static final int LETTERS_ONLY = 1;
public static final int MIXED = 2;
private static final String LETTERS = "qwertyuiopzxcvbnmasdfghjklAZERTYUIOPMLKJHGFDSQWXCVBN";
private static final int LETTERS_LENGTH = LETTERS.length();
private static final String NUMBERS = "1357924680";
private static final int NUMBERS_LENGTH = NUMBERS.length();
public static String get(int length)
{
return get(new Random(System.currentTimeMillis()), length, MIXED);
}
public static String get(int length, int type)
{
return get(new Random(System.currentTimeMillis()), length, type);
}
public static String get(Random random, int length, int type)
{
if (length <= 0) throw new IllegalArgumentException("length has to be bigger zero");
if (type != DIGITS_ONLY &&
type != LETTERS_ONLY &&
type != MIXED)
{
throw new IllegalArgumentException("invalid type");
}
StringBuilder generated_password = new StringBuilder("");
boolean type_selector;
for (int i = 0; i < length; i++)
{
type_selector = random.nextBoolean();
// characters
if (LETTERS_ONLY == type ||
type != DIGITS_ONLY && type_selector)
{
char c = LETTERS.charAt((int)((double)LETTERS_LENGTH * random.nextDouble()));
if (random.nextDouble() > 0.5D)
{
c = Character.toUpperCase(c);
}
generated_password.append(c);
}
// digits
else
{
generated_password.append(NUMBERS.charAt((int)((double)NUMBERS_LENGTH * random.nextDouble())));
}
}
return generated_password.toString();
}
}