Minimum characters required to make a password strong

19 Oct, 2020
Given string str denoting a password, the task is to count the minimum characters that need to be added to make the password strong. A password is said to be strong if it satisfies the following criteria: 
It contains at least 8 characters.
It contains at least one digit.
It contains at least one lower case alphabet.
It contains at least one upper case alphabet.
It contains at least one special character which includes !@#$%^&*()-+
Examples: 
Input: str = “Geeksforgeeks” Output: 2 Explanation: By adding one digit and one special character we can make the password strong.Input: str = “Geeks1” Output: 2 Explanation: A special character along with one more character needs to be added to make the password strong. 
Approach: This problem can be solved using Regular Expressions: 
Create the regular expressions to check digit, special character, upper case, and lower case alphabet.
Compile the regular expressions and find matches with the password string.
Increase the counter, say, count, to add characters whenever any of the regular expression does not match.
After adding count characters to the password string, check if the length of the string is less than 8 or not. If so, add the difference to count and print.
Below is the implementation of the above approach.  
Java
Python3
// Java program to find minimum number// of characters required to be added// to make a password strong import java.util.regex.Pattern;import java.util.regex.Matcher; class GFG {     // Function to count minimum    // number of characters    static int countCharacters(        String password)    {         int count = 0;         // Create the patterns to search digit,        // upper case alphabet, lower case        // alphabet and special character        Pattern digit = Pattern.compile("(\\d)");        Pattern upper = Pattern.compile("([A-Z])");        Pattern lower = Pattern.compile("([a-z])");        Pattern spChar = Pattern.compile("(\\W)");         // Search the above patterns in password.        Matcher Digit = digit.matcher(password);        Matcher Upper = upper.matcher(password);        Matcher Lower = lower.matcher(password);        Matcher Special = spChar.matcher(password);         // If no digits are present        if (!Digit.find()) {            count++;        }        // If no upper case alphabet is present        if (!Upper.find()) {            count++;        }        // If no lower case alphabet is present        if (!Lower.find()) {            count++;        }        // If no special character is is present        if (!Special.find()) {            count++;        }         // Check if the string length after adding        // the required characters is less than 8        if ((count + password.length()) < 8) {             // Add the number of            // characters to be added            count = count + 8                    - (count + password.length());        }         return count;    }     // Driver Code    public static void main(String args[])    {         String password1 = "Geeksforgeeks";        System.out.println(            countCharacters(password1));         String password2 = "Geeks1";        System.out.println(            countCharacters(password2));    }}
# Python3 program to find# minimum number of characters# required to be added to make# a password strongimport re # Function to count minimum# number of charactersdef countCharacters(password):     count = 0     # Create the patterns to search digit,    # upper case alphabet, lower case    # alphabet and special character    digit = re.compile("(\\d)")    upper = re.compile("([A-Z])")    lower = re.compile("([a-z])")    spChar = re.compile("(\\W)")     # Search the above patterns    # in password.     # If no digits are present    if(not re.search(digit,                     password)):        count += 1     # If no upper case alphabet    # is present    if(not re.search(upper,                     password)):        count += 1     # If no lower case alphabet    # is present    if(not re.search(lower,                     password)):        count += 1     # If no special character    # is is present    if(not re.search(spChar,                     password)):        count += 1     # Check if the string length    # after adding the required    # characters is less than 8    if((count +        len(password)) < 8):         # Add the number of        # characters to be added        count = count + 8 - (count +                             len(password))     return count # Driver codepassword1 = "Geeksforgeeks"print(countCharacters(password1)) password2 = "Geeks1"print(countCharacters(password2)) # This code is contributed by avanitrachhadiya2155
2
2


 
avanitrachhadiya2155
CPP-regex
java-regular-expression
Pattern Searching
Strings
Strings
Pattern Searching
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.