Dada la string str que denota una contraseña, la tarea es contar los caracteres mínimos que deben agregarse para que la contraseña sea segura .
Se dice que una contraseña es segura si cumple los siguientes criterios:
- Contiene al menos 8 caracteres.
- Contiene al menos un dígito.
- Contiene al menos un alfabeto en minúsculas.
- Contiene al menos un alfabeto en mayúsculas.
- Contiene al menos un carácter especial que incluye !@#$%^&*()-+
Ejemplos:
Entrada: str = «Geeksforgeeks»
Salida: 2
Explicación:
Al agregar un dígito y un carácter especial, podemos hacer que la contraseña sea segura.
Entrada: str = «Geeks1»
Salida: 2
Explicación:
Se debe agregar un carácter especial junto con un carácter más para que la contraseña sea segura.
Enfoque: este problema se puede resolver usando expresiones regulares :
- Cree las expresiones regulares para comprobar dígitos, caracteres especiales, mayúsculas y minúsculas del alfabeto.
- Compile las expresiones regulares y encuentre coincidencias con la string de contraseña.
- Aumente el contador, por ejemplo, count , para agregar caracteres cada vez que alguna de las expresiones regulares no coincida.
- Después de agregar caracteres de conteo a la string de contraseña, verifique si la longitud de la string es menor a 8 o no. Si es así, agregue la diferencia para contar e imprimir.
A continuación se muestra la implementación del enfoque anterior.
Java
// 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
# Python3 program to find # minimum number of characters # required to be added to make # a password strong import re # Function to count minimum # number of characters def 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 code password1 = "Geeksforgeeks" print(countCharacters(password1)) password2 = "Geeks1" print(countCharacters(password2)) # This code is contributed by avanitrachhadiya2155
2 2
Publicación traducida automáticamente
Artículo escrito por prashant_srivastava y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA