Version: 2.0

Type: Function

Category: Algorithms

License: GNU General Public License

Description: Very simple script which generates an 8 digit paswoord cinsisting of letters and numbers and capital letters



/* Author: J.B.Lamer, Date: 20070321
 *
 * generates a password of length between $minlen and $maxlen
 * This calls getPossibleString() (below) that returns a string of possible
 *   characters for the password
 * if $maxlen is null (or out of range) than $maxlen will equal minlen
 * if $minlen is out of range than it will equal 8 (the range is between 4 and 20)
 * $use_upper, $str_include, and $str_exclude are used to build possible string
 *   see getPossibleString()
 *
 * a good way to call is $p = generate_password(6,10,true,'','0OQI1lqg');
 *  so you exclude zero,'oh', and Q; capital i, one, and lower L; q and g; and whatever
 *  else you think look the same
 * That will generate a password of length 6 to 10 that have capital or lower case letters
 */
function generate_password( $minlen=8, $maxlen=null, $use_upper=false, $str_include=null, $str_exclude=null )
{
	if ( !(($minlen = intval($minlen)) >= 4 && $minlen <= 20) )
	{	$minlen = 8; }
	if ( is_null($maxlen)
		|| !(($maxlen = intval($maxlen)) >= 4 && $maxlen <= 20) )
	{	$maxlen = $minlen; }
	
	$password = '';
	$possible = getPossibleString( $use_upper, $str_include, $str_exclude );
	
	$p_len = strlen($possible);
	
	// care about repeating? make proper checks if you do
	$len = mt_rand($minlen,$maxlen);
	for ( $i=0; $i < $len; $i++ )
	{
		$password .= substr( $possible, mt_rand(0, $p_len), 1 );
	}
	return $password;		
}

/* Author: J.B.Lamer, Date: 20070321
 *
 * generate a string of all possible chars that can be used for password
 * automatically, there is 0-9 and a-z
 * $use_upper set to true includes A-Z
 * $str_include is a string of any extra characters to include
 * $str_exclude is a string of any characters to exclude.. this is called last
 */
function getPossibleString( $use_upper=false, $str_include=null, $str_exclude=null )
{
	$possible = '';
	for ( $i=ord('0'); $i <= ord('9'); $i++ )
	{	$possible .= chr($i); }
	for ( $i=ord('a'); $i <= ord('z'); $i++ )
	{	$possible .= chr($i); }
	for ( $i=ord('A'); $use_upper && $i <= ord('Z'); $i++ )
	{	$possible .= chr($i); }
	
	if ( !is_null( $str_include ) && strlen($str_include) > 0 )
	{
		$str_include = strval($str_include);
		for ( $i=0; $i < strlen($str_include); $i++ )
		{
			if ( false === strpos( $possible, $str_include[$i] ) )
			{	$possible .= $str_include[$i]; }
		}
	}
		
	if ( !is_null( $str_exclude ) && strlen($str_exclude) > 0 )
	{
		$str_exclude = strval($str_exclude);
		for ( $i=0; $i < strlen($str_exclude); $i++ )
		{
			if ( false !== ($pos = strpos($possible, $str_exclude[$i])) )
			{
				$hold = '';
				$hold .= substr($possible,0,$pos);
				if ( $pos+1 < strlen($possible) )
				{	$hold .= substr($possible,$pos+1); }
				$possible = $hold;
			}
		}
	}
	return $possible;
}