6.18 (检测密码)一些网站对于密码具有一些规则。编写一个方法,检测字符串是否是一个有效密码。
假定密码规则如下:
• 密码必须至少8位字符。
• 密码仅能包含字母和数字。
• 密码必须包含至少两个数字。
编写一个程序,提示用户输入一个密码,如果符合规则,则显示Valid Password,否则显示Invalid Password。
1 /** fileName: passwdRule.java 2 function: 检测输入的密码是否符合密码规则 3 create Time:2019/10/17 4 mail: [email protected] 5 */ 6 7 import java.util.Scanner; 8 public class passwdRule{ 9 public static void main(String[] args){ 10 11 Scanner input = new Scanner(System.in); 12 System.out.print("请输入密码:"); 13 String passwd = input.next(); 14 15 //密码检测 16 if(passwdDigit(passwd)){ 17 if((getPasswdNumber(passwd) >= 2) && ((getPasswdNumber(passwd)+getPasswdDigitNumber(passwd)) == passwd.length())){ 18 System.out.println("Valid Password 通过"); 19 }else 20 System.out.println("Invalid Password 不通过"); 21 }else{ 22 System.out.println("Invalid Password 不通过"); 23 } 24 } 25 26 /** 检测passwd的位数长度是否符合规则, 符合返回true*/ 27 public static boolean passwdDigit(String passwd){ 28 //设置最大字符限制和最小字符限制 29 final int MAX = 1024; 30 final int MIN = 8; 31 int passwdLength = passwd.length(); 32 if((passwdLength >= MIN) && (passwdLength < MAX)) 33 return true; 34 return false; 35 } 36 37 /** 返回passwd中的数字或字母个数 ,k为0表示数字,1表示字母 */ 38 public static int getPasswdDigitNumber(String passwd){ 39 //字母个数 40 int digitNumber = 0; 41 char digitUpper; 42 for(int i = 0; i< passwd.length(); i++){ 43 digitUpper = Character.toUpperCase(passwd.charAt(i)); 44 if(digitUpper > 'A' && digitUpper < 'Z') 45 digitNumber++; 46 } 47 return digitNumber; 48 } 49 50 /** 返回passwd的数字个数 */ 51 public static int getPasswdNumber(String passwd){ 52 int number = 0; 53 int arrayNumber; 54 55 for(int i = 0; i < passwd.length(); i++){ 56 arrayNumber = passwd.charAt(i); 57 if((int)arrayNumber > 47 && (int)arrayNumber < 58) 58 number++; 59 } 60 return number; 61 } 62 }
这个代码写了1个晚上,删了写,最后发现charAt(i)这个是重点!