PatternUtils.java 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. package com.fdkankan.common.util;
  2. import java.util.regex.Matcher;
  3. import java.util.regex.Pattern;
  4. public class PatternUtils {
  5. public static boolean isEmail(String email) {
  6. // 1、\\w+表示@之前至少要输入一个匹配字母或数字或下划线
  7. // \\w 单词字符:[a-zA-Z_0-9] // 2、(\\w+\\.)表示域名. 如新浪邮箱域名是sina.com.cn
  8. // {1,3}表示可以出现一次或两次或者三次.
  9. String reg = "\\w+@(\\w+\\.){1,3}\\w+";
  10. Pattern pattern = Pattern.compile(reg);
  11. boolean flag = false;
  12. if (email != null) {
  13. Matcher matcher = pattern.matcher(email);
  14. flag = matcher.matches();
  15. }
  16. return flag;
  17. }
  18. /**
  19. * 判断身份证格式
  20. *
  21. * @param idNum
  22. * @return
  23. */
  24. public static boolean isIdNum(String idNum) {
  25. if (idNum == null || "".equals(idNum)) {
  26. return false;
  27. }
  28. // 定义判别用户身份证号的正则表达式(15位或者18位,最后一位可以为字母)
  29. String regularExpression = "(^[1-9]\\d{5}(18|19|20)\\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\\d{3}[0-9Xx]$)|" +
  30. "(^[1-9]\\d{5}\\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\\d{3}$)";
  31. //假设18位身份证号码:41000119910101123X 410001 19910101 123X
  32. //^开头
  33. //[1-9] 第一位1-9中的一个 4
  34. //\\d{5} 五位数字 10001(前六位省市县地区)
  35. //(18|19|20) 19(现阶段可能取值范围18xx-20xx年)
  36. //\\d{2} 91(年份)
  37. //((0[1-9])|(10|11|12)) 01(月份)
  38. //(([0-2][1-9])|10|20|30|31)01(日期)
  39. //\\d{3} 三位数字 123(第十七位奇数代表男,偶数代表女)
  40. //[0-9Xx] 0123456789Xx其中的一个 X(第十八位为校验值)
  41. //$结尾
  42. //假设15位身份证号码:410001910101123 410001 910101 123
  43. //^开头
  44. //[1-9] 第一位1-9中的一个 4
  45. //\\d{5} 五位数字 10001(前六位省市县地区)
  46. //\\d{2} 91(年份)
  47. //((0[1-9])|(10|11|12)) 01(月份)
  48. //(([0-2][1-9])|10|20|30|31)01(日期)
  49. //\\d{3} 三位数字 123(第十五位奇数代表男,偶数代表女),15位身份证不含X
  50. //$结尾
  51. boolean matches = idNum.matches(regularExpression);
  52. //判断第18位校验值
  53. if (matches) {
  54. if (idNum.length() == 18) {
  55. try {
  56. char[] charArray = idNum.toCharArray();
  57. //前十七位加权因子
  58. int[] idCardWi = {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2};
  59. //这是除以11后,可能产生的11位余数对应的验证码
  60. String[] idCardY = {"1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2"};
  61. int sum = 0;
  62. for (int i = 0; i < idCardWi.length; i++) {
  63. int current = Integer.parseInt(String.valueOf(charArray[i]));
  64. int count = current * idCardWi[i];
  65. sum += count;
  66. }
  67. char idCardLast = charArray[17];
  68. int idCardMod = sum % 11;
  69. if (idCardY[idCardMod].toUpperCase().equals(String.valueOf(idCardLast).toUpperCase())) {
  70. return true;
  71. } else {
  72. return false;
  73. }
  74. } catch (Exception e) {
  75. return false;
  76. }
  77. }
  78. }
  79. return matches;
  80. }
  81. //验证手机号码
  82. public static boolean isPhoneNumber(String number) {
  83. String rgx = "^1(3|4|5|7|8)\\d{9}$";
  84. // return isCorrect(rgx, number);
  85. return true;
  86. }
  87. //正则验证
  88. public static boolean isCorrect(String rgx, String res) {
  89. Pattern p = Pattern.compile(rgx);
  90. Matcher m = p.matcher(res);
  91. return m.matches();
  92. }
  93. }