52a2ef945edc322a94c3916c10b4c466d6f2f964.svn-base 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. package cn.com.goldenwater.dcproj.utils;
  2. import java.util.LinkedHashSet;
  3. import java.util.Set;
  4. /**
  5. * 密码检测
  6. * */
  7. public class PasswordChecker {
  8. private static boolean upperCase = false; // 包含大写字母
  9. private static boolean lowerCase = false; // 包含小写字母
  10. private static boolean letter = true; // 包含字母
  11. private static boolean digit = true; // 包含数字
  12. private static boolean special = true; // 包含特殊字符
  13. private static Set<Character> specialCharSet = null; // 特殊字符集合
  14. private static int minLength = 8; // 最小长度
  15. private static int maxLength = 20; // 最大长度
  16. /**
  17. * 密码符合规则,返回true
  18. */
  19. public static boolean check(String password){
  20. if(password==null || password.length()<minLength || password.length()>maxLength){
  21. // 长度不符合
  22. return false;
  23. }
  24. specialCharSet=defaultSpecialCharSet();
  25. boolean containUpperCase = false;
  26. boolean containLowerCase = false;
  27. boolean containLetter = false;
  28. boolean containDigit = false;
  29. boolean containSpecial = false;
  30. for(char ch : password.toCharArray()){
  31. if(Character.isUpperCase(ch)){
  32. containUpperCase = true;
  33. containLetter = true;
  34. }else if(Character.isLowerCase(ch)){
  35. containLowerCase = true;
  36. containLetter = true;
  37. }else if(Character.isDigit(ch)){
  38. containDigit = true;
  39. }else if(specialCharSet.contains(ch)){
  40. containSpecial = true;
  41. }else{
  42. // 非法字符
  43. return false;
  44. }
  45. }
  46. if(upperCase && !containUpperCase){
  47. return false;
  48. }
  49. if(lowerCase && !containLowerCase){
  50. return false;
  51. }
  52. if(letter && !containLetter){
  53. return false;
  54. }
  55. if(digit && !containDigit){
  56. return false;
  57. }
  58. if(special && !containSpecial){
  59. return false;
  60. }
  61. return true;
  62. }
  63. public static Set<Character> defaultSpecialCharSet(){
  64. Set<Character> specialChars = new LinkedHashSet<>();
  65. // 键盘上能找到的符号
  66. specialChars.add(Character.valueOf('~'));
  67. specialChars.add(Character.valueOf('`'));
  68. specialChars.add(Character.valueOf('!'));
  69. specialChars.add(Character.valueOf('@'));
  70. specialChars.add(Character.valueOf('#'));
  71. specialChars.add(Character.valueOf('$'));
  72. specialChars.add(Character.valueOf('%'));
  73. specialChars.add(Character.valueOf('^'));
  74. specialChars.add(Character.valueOf('&'));
  75. specialChars.add(Character.valueOf('*'));
  76. specialChars.add(Character.valueOf('('));
  77. specialChars.add(Character.valueOf(')'));
  78. specialChars.add(Character.valueOf('-'));
  79. specialChars.add(Character.valueOf('_'));
  80. specialChars.add(Character.valueOf('+'));
  81. specialChars.add(Character.valueOf('='));
  82. specialChars.add(Character.valueOf('{'));
  83. specialChars.add(Character.valueOf('['));
  84. specialChars.add(Character.valueOf('}'));
  85. specialChars.add(Character.valueOf(']'));
  86. specialChars.add(Character.valueOf('|'));
  87. specialChars.add(Character.valueOf('\\'));
  88. specialChars.add(Character.valueOf(':'));
  89. specialChars.add(Character.valueOf(';'));
  90. specialChars.add(Character.valueOf('"'));
  91. specialChars.add(Character.valueOf('\''));
  92. specialChars.add(Character.valueOf('<'));
  93. specialChars.add(Character.valueOf(','));
  94. specialChars.add(Character.valueOf('>'));
  95. specialChars.add(Character.valueOf('.'));
  96. specialChars.add(Character.valueOf('?'));
  97. specialChars.add(Character.valueOf('/'));
  98. return specialChars;
  99. }
  100. }