1  /**
  2     This program generates a random password.
  3  */
  4  public class PasswordGenerator
  5  {
  6     public static void main(String[] args)
  7     {
  8        String result = makePassword(8);
  9        System.out.println(result);
 10     }
 11  
 12     /**
 13        Generates a random password.
 14        @param length the length of the password
 15        @return a password of the given length with one digit and one 
 16        special symbol
 17     */
 18     public static String makePassword(int length)
 19     {
 20        String password = "";
 21  
 22        // Pick random letters
 23  
 24        for (int i = 0; i < length - 2; i++)
 25        {
 26           password = password + randomCharacter("abcdefghijklmnopqrstuvwxyz");
 27        }
 28  
 29        // Insert two random digits
 30  
 31        String randomDigit = randomCharacter("0123456789");
 32        password = insertAtRandom(password, randomDigit);
 33        String randomSymbol = randomCharacter("+-*/?!@#$%&");
 34        password = insertAtRandom(password, randomSymbol);
 35        return password;
 36     }
 37  
 38     /**
 39        Returns a string containing one character randomly chosen from a given string.
 40        @param characters the string from which to randomly choose a character
 41        @return a substring of length 1, taken at a random index
 42     */
 43     public static String randomCharacter(String characters)
 44     {
 45        int n = characters.length();
 46        int r = (int)(n * Math.random());
 47        return characters.substring(r, r + 1);
 48     }
 49     
 50     /**
 51        Inserts one string into another at a random position.
 52        @param str the string into which another string is inserted
 53        @param toInsert the string to be inserted
 54        @return the result of inserting toInsert into str
 55     */
 56     public static String insertAtRandom(String str, String toInsert)
 57     {
 58        int n = str.length();
 59        int r = (int) ((n + 1) * Math.random());
 60        return str.substring(0, r) + toInsert + str.substring(r);
 61     }
 62  }