Home » C++ programs

C++ program to generate random password

Here, we will implement a menu drive program in C++ to generate random password with various combinations of alphabets and special characters.
Submitted by Hritik Raj, on June 21, 2018

Problem Statement:

Write a menu driven program to generate password randomly

constraint:

  1. password should consist of
    • lowercase Alphabet - a to z
    • UpperCase Alphabet - A to Z
    • Number - 0 to 9
    • Special Symbol - !,@,#,$,%,&
  2. Password length should be
    • Minimum - 7
    • Maximum - 100
  3. Password should begin with a letter (can be lowercase or uppercase)
  4. Password should contain at least 2 lowercase letter , 2 uppercase letter, 1 number , and 1 special symbol
  5. Don't make use of any library function like rand() or srand().
  6. Each time generated password should be unique.

Program to generate random password in C++

Note: Program is compiled and executed on Code Block IDE (version 17.12) using GNU GCC Compiler on windows platform



#include <bits/stdc++.h>
#include <stdio.h>
using namespace std;

//selectArray is  a utility function that is used to 
//randomly generate a integer in the range 1 to 4 (both inclusive)
int selectArray()
{
	// Using malloc() function we are Dynamically allocating memory 
	//for a Integer and this function will return a pointer pointing to the allocated memory
	int *j=(int*)malloc(sizeof(int));
	// The content of int pointer j (i.e an address) will be 
	//interpreted as an Integer and will be assigned to integer variable i.
	int i=int(j); 
	i=i%5;
	if(i==0)
		i++;
	return i;
}

//getKey() is another utility function that is used to randomly generate 
//an integer in the range 0 to 25 (both inclusive)
int getKey()
{
	// Using malloc() function we are Dynamically allocating memory for an 
	//Integer and this function will return a pointer pointing to the allocated memory
	int *i=(int *)malloc(sizeof(int));
	// The content of int pointer i (i.e an address) will be interpreted as 
	// an Integer and will be assigned to integer variable key.
	int key=int(i);
	key=key%26;
	return key;
}
void generate_password(int length)
{
	//Intializing result string password as NULL.
	string password="";

	//Strings whose characters will be used to build password
	string alphabet="abcdefghijklmnopqrstuvwxyz";
	string ALPHABET="ABCDEFGHIJKLMNOPQRSTUVWXYZ";
	string s_symbol="[email protected]#$%&";
	string number="0123456789";

	//intializing local variables
	int key,count_alphabet=0,count_ALPHABET=0,count_number=0,count_s_symbol=0;

	//Count will store the length of the password being created,initially this will be zero(0)
	int count=0;
	while(count<length)
	{
		// selectArray() function will return a number 1 to 4
		// and will use to select one of the above defined string 
		//(i.e alphabet or ALPHABET or s_symbol or number )
		// 1 is for string alphabet
		// 2 is for string ALPHABET
		// 3 is for string number
		// and 4 is for string s_symbol


		int k=selectArray();

		//for the first character of password it is mentioned that ,it should be a letter
		// so the string that should be selected is either alphabet or ALPHABET (i.e 1 or 2)
		// following if condition will take care of it.
		if(count==0)
		{
			k=k%3;
			if(k==0)
				k++;
		}
		switch(k)
		{
			case 1:
			// following if condition will check if minimum requirement of alphabet 
			// character has been fulfilled or not
			// incase it has been fulfilled and minimum requirements of other 
			// characters is still left then it will break ;
			if((count_alphabet==2)&&(count_number==0||count_ALPHABET==0||count_ALPHABET==1||count_s_symbol==0))
				break;

			key=getKey();
			password=password+alphabet[key];
			count_alphabet++;
			count++;
			break;
			
			case 2:
			// following if condition will check if minimum requirement of 
			// ALPHABET character has been fulfilled or not
			// incase it has been fulfilled and minimum requirements of 
			// other characters is still left then it will break ;
			if((count_ALPHABET==2)&&(count_number==0||count_alphabet==0||count_alphabet==1||count_s_symbol==0))
				break;
			key=getKey();
			password=password+ALPHABET[key];
			count_ALPHABET++;
			count++;
			break;
			
			case 3:
			// following if condition will check if minimum requirement 
			// of Numbers  has been fulfilled or not
			// incase it has been fulfilled and minimum requirements of 
			// other characters is still left then it will break ;
			if((count_number==1)&&(count_alphabet==0||count_alphabet==1||count_ALPHABET==1||count_ALPHABET==0||count_s_symbol==0))
				break;

			key=getKey();
			key=key%10;
			password=password+number[key];
			count_number++;
			count++;
			break;
			
			case 4:
			// following if condition will check if minimum requirement of 
			// Special symbol character has been fulfilled or not
			// incase it has been fulfilled and minimum requirements of 
			// other characters is still left then it will break ;
			if((count_s_symbol==1)&&(count_alphabet==0||count_alphabet==1||count_ALPHABET==0||count_ALPHABET==1||count_number==0))
				break;

			key=getKey();
			key=key%6;
			password=password+s_symbol[key];
			count_s_symbol++;
			count++;
			break;
		}
	}

	cout << "\n-----------------------------\n";
	cout << "         Password             \n";
	cout << "------------------------------\n\n";
	cout << " " <<  password;
	cout <<"\n\nPress any key continue \n";
	getchar();
}
int main()
{
	int opt,length;
	//Menu
	do
	{
		cout << "\n-----------------------------\n";
		cout << "  Random Password Generator\n";
		cout << "------------------------------\n\n";
		cout << "    1. Generate Password" << "\n";
		cout << "    2. Exit" << "\n\n";
		cout << "Press key 1 to Generate Password and key 2 to exit  : ";
		cin >> opt;
		
		switch(opt)
		{
			case 1:
			cout << "Enter Length :  ";
			cin >> length;
			//if length is less than 7 , program  will show error
			if(length<7)
			{
				cout << "\nError : Password Length Should be atleast 7\n";
				cout <<"Press any key to try again \n";
				getchar();
			}
			// Length should not exceed 100 , program should show error if it exceeds
			else if(length>100)
			{
				cout << "\nError : Maximum length of password should be 100\n";
				cout <<"Press any key to try again \n";
				getchar();
			}
			//Otherwise call generate_password() function to generate password
			else
				generate_password(length);
			break;
			
			default:
			// If invalid option is choosen by user it will also show error
			if(opt!=2)
			{
				printf("\nInvalid choice\n");
				printf("Please Press ( 1 ) to generate password and ( 2 ) to exit.\n");
				cout <<"Press any key to try again \n";
				getchar();
			}
			break;
		}
	}while(opt!=2);

	return 0;
}

Output

-----------------------------
  Random Password Generator
------------------------------

    1. Generate Password
    2. Exit

Press key 1 to Generate Password and key 2 to exit  : 1
Enter Length :  16

-----------------------------
         Password
------------------------------

 w#yS2S!youMue6yw

Press any key continue

-----------------------------
  Random Password Generator
------------------------------

    1. Generate Password
    2. Exit

Press key 1 to Generate Password and key 2 to exit  : 1
Enter Length :  50

-----------------------------
         Password
------------------------------

 cE8o!UAO#k6Wi8cCK2!c4kMuq!W2eY40!eaS!oEwi2E#0u!yi#

Press any key continue

-----------------------------
  Random Password Generator
------------------------------

    1. Generate Password
    2. Exit

Press key 1 to Generate Password and key 2 to exit  : 2

Process returned 0 (0x0)   execution time : 24.358 s
Press any key to continue.





Comments and Discussions

Ad: Are you a blogger? Join our Blogging forum.
Learn PCB Designing: PCB DESIGNING TUTORIAL




Languages: » C » C++ » C++ STL » Java » Data Structure » C#.Net » Android » Kotlin » SQL
Web Technologies: » PHP » Python » JavaScript » CSS » Ajax » Node.js » Web programming/HTML
Solved programs: » C » C++ » DS » Java » C#
Aptitude que. & ans.: » C » C++ » Java » DBMS
Interview que. & ans.: » C » Embedded C » Java » SEO » HR
CS Subjects: » CS Basics » O.S. » Networks » DBMS » Embedded Systems » Cloud Computing » Machine learning » CS Organizations » Linux » DOS
More: » Articles » Puzzles » News/Updates

© https://www.includehelp.com some rights reserved.