Random Password Generator

One way to make a random password generator. See it in action: Random Password Generator Example

Hopefully I’ve commented enough in the code to explain it all:

<?php
/**
 * generateRandomPasswords.php
 * @author Robert Newton <lektrikpukeAtYahooDotCom>
 * if you use/reuse my code, please give a mention to my site/blog--Thanks!
 */

/** arrays where characters are stored
 * note:  special characters like & (ampersand) and # (pound) can cause display issues
 */
$capLetters = array('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');
$lowercase = array('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');
$numbers = array('0', '1', '2', '3', '4', '5', '6', '7', '8', '9');
$specials = array('!', '@', '#', '$', '%', '^', '*', '+', '=', '_', '~', '{', '}');

// default counts of characters, overridden when correct values are entered into form
$lowerCount = 2;
$numCount = 3;
$capCount = 1;
$specialCount = 3;

// change this to change how many times the password is (re)shuffled and displayed
$shuffleCount = 4;

// don't change below
$password = '';
$eMess = '';

/**
 * genRandom
 * loops through passed in array $arr $cCount number of times picking characters
 * randomly and adding to return string $randchars
 * @param array $arr
 * @param int $cCount
 * @return string
 */
function genRandom($arr, $cCount) {
    $arrCount = count($arr) - 1; // counts chars in array--used to set upper limit of random
    $randchars = '';
    for ($i = 0; $i < $cCount; $i++) {
        $randchars .= $arr[mt_rand(0, $arrCount)];
    }
    return $randchars;
}

if (isset($_POST['submit'])) {
    try {
        foreach ($_POST as $key => $val) {
            if ($val !== 'Generate' && $val !== '') { // exclude submit button and empty values
                if (!is_numeric($val) || abs((int)$val) > 99) { // if it's not a number(int) or greater than 99, throw an error
                    throw new Exception('Value must be numeric: ' . $val);
                } else { // else assign value to variable (overriding default)
                    ${$key} = abs((int)$val); // negatives are not allowed
                }
            }
        }
    } catch (Exception $e) { // if an error occurred, catch it and add to error message
        $eMess .= $e->getMessage();
    }
}

// call function passing in array and number of characters wanted (to be generated)
$password .= genRandom($lowercase, $lowerCount);
$password .= genRandom($numbers, $numCount);
$password .= genRandom($capLetters, $capCount);
$password .= genRandom($specials, $specialCount);

// shuffle generated password $shuffleCount number of times
for ($i = 0; $i < $shuffleCount; $i++) {
    echo "<br />" . strlen($password) . ' char shuffled: ' . str_shuffle($password);
}
echo "<br /><br />Contains " . $lowerCount . ' lowercase, ' . $capCount 
        . ' uppercase, ' . $specialCount . ' special chars, and ' . $numCount . ' numbers!';
?>
<br /><br />
<form name="generate" method="post" action="genRandom.php">
    <label>Lower case: <input type="text" name="lowerCount" /></label>
    <label style="margin-left: 15px;">Upper case: <input type="text" name="capCount" /></label>
    <label style="margin-left: 15px;">Special: <input type="text" name="specialCount" /></label>
    <label style="margin-left: 15px;">Number: <input type="text" name="numCount" /></label>
    <input style="margin-left: 15px;" type="submit" name="submit" value="Generate" />
</form>

< ?php
// if $eMess is not blank/empty, display it
if ($eMess != '')
    echo $eMess;
?>
This entry was posted in Computer Stuff, PHP and tagged , . Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *

Enter Captcha Here : *

Reload Image