import java.util.Random; public class RandomPassword { private int length = 8; // password length private int numLen = 2; // count of numbers private int nonABNumLen = 1;// count of special character /** * get an alphabeta * @return */ private char getAB() { Random rand = new Random(); int ri = rand.nextInt(52); char c = 0; if (ri < 26) { c = (char) (65 + ri); } else { c = (char) (97 + ri - 26); } return c; } /** * get a num * @return */ private char getNum() { Random rand = new Random(); int ri = rand.nextInt(10); char c = (char) (48 + ri); return c; } /** * get a non num / non abc char * @return */ private char getNonABNum() { Random rand = new Random(); int total = (47 - 32) + (64 - 57) + (96 - 90) + (126 - 122); //total nonABNUM characters int ri = rand.nextInt(total); char c = 0; if (ri < (47 - 32)) { c = (char) (ri + 32 + 1); } else if (ri < (47 - 32)+(64 - 57)) { c = (char) (ri - (47 - 32) + 57 + 1); } else if (ri < (47 - 32)+(64 - 57) + (96 - 90)) { c = (char) (ri - (47 - 32) -(64 - 57) + 90 + 1 ); } else { c = (char) (ri - (47 - 32) -(64 - 57) - (96 - 90) + 122 + 1 ); } return c; } /** * Generate the password chars array */ public String password() { char[] pwd = new char[length]; // generate the pwd chars for (int i = 0; i < length; i++ ) { if (i < length -numLen -nonABNumLen) { pwd[i] = getAB(); } else if (i < length -nonABNumLen ) { pwd[i] = getNum(); } else { pwd[i] = getNonABNum(); } } // randomly shuffle pwd char array - Fisher–Yates shuffle Random rand = new Random(); for (int i = length - 1; i > 0; i --) { int j = rand.nextInt(i + 1); // swap char[i] and char[j] char c = pwd[j]; pwd[j] = pwd[i]; pwd[i] = c; } return new String(pwd); } /** * Test * @param args */ public static void main(String[] args) { RandomPassword rp = new RandomPassword (); for (int i = 0; i< 20; i++) { System.out.println ("Random Password: " + rp.password()); } } }
某次运行结果:
Random Password: "f1iiu9E Random Password: X:9LT9UX Random Password: BO7CQ'U4 Random Password: Esp^N00r Random Password: f51BpT^D Random Password: d2)mRPy0 Random Password: m0Ww^8aa Random Password: FwV)RQ22 Random Password: 1_9hRtSt Random Password: Q9m1YMM= Random Password: 7cN#Jo7o Random Password: 3oa7s^OO Random Password: i(OB6Xz8 Random Password: VL6h2z^j Random Password: (eVqu9p9 Random Password: ~DGGS80o Random Password: [2lp4xlL Random Password: #vs0sHv9 Random Password: Lp0XX2]L Random Password: (POo9jC7