package cn.haokuai.maya.suppliers.app.common;import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.GregorianCalendar;import java.util.Hashtable;import java.util.regex.Matcher;import java.util.regex.Pattern;import android.annotation.SuppressLint;import android.net.ParseException;public class RegexUtils {/** * 判断手机号码是否合法 *  * @param mobiles * @return */public static boolean checkMobile(String mobiles) {if (null == mobiles || "".equals(mobiles))return false;Pattern p = Pattern.compile("^((13[0-9])|(15[^4,\\D])|(17[0])|(18[0,5-9]))\\d{8}$");Matcher m = p.matcher(mobiles);return m.matches();}/** * 验证固定电话号码 * @return 验证成功返回true,验证失败返回false */public static boolean checkPhone(String phone) {String regex = "(\\+\\d+)?(\\d{3,4}\\-?)?\\d{7,8}$";return Pattern.matches(regex, phone);}/** * 验证整数(正整数和负整数) *  * @param digit *            一位或多位0-9之间的整数 * @return 验证成功返回true,验证失败返回false */public static boolean checkDigit(String digit) {String regex = "\\-?[1-9]\\d+";return Pattern.matches(regex, digit);}/** * 验证整数和浮点数(正负整数和正负浮点数) *  * @param decimals *            一位或多位0-9之间的浮点数,如:1.23,233.30 * @return 验证成功返回true,验证失败返回false */public static boolean checkDecimals(String decimals) {String regex = "\\-?[1-9]\\d+(\\.\\d+)?";return Pattern.matches(regex, decimals);}/** * 验证空白字符 *  * @param blankSpace *            空白字符,包括:空格、\t、\n、\r、\f、\x0B * @return 验证成功返回true,验证失败返回false */public static boolean checkBlankSpace(String blankSpace) {String regex = "\\s+";return Pattern.matches(regex, blankSpace);}/** * 验证中文 *  * @param chinese *            中文字符 * @return 验证成功返回true,验证失败返回false */public static boolean checkChinese(String chinese) {String regex = "^[\u4E00-\u9FA5]+$";return Pattern.matches(regex, chinese);}/** * 验证URL地址 *  * @param url * @return 验证成功返回true,验证失败返回false */public static boolean checkURL(String url) {String regex = "(https?://(w{3}\\.)?)?\\w+\\.\\w+(\\.[a-zA-Z]+)*(:\\d{1,5})?(/\\w*)*(\\??(.+=.*)?(&.+=.*)?)?";return Pattern.matches(regex, url);}/** * 获取网址 URL 的一级域名  * @param url * @return */public static String getDomain(String url) {Pattern p = Pattern.compile("(?<=http://|\\.)[^.]*?\\.(com|cn|net|org|biz|info|cc|tv)",Pattern.CASE_INSENSITIVE);Matcher matcher = p.matcher(url);matcher.find();return matcher.group();}/** * 匹配中国邮政编码 *  * @param postcode *            邮政编码 * @return 验证成功返回true,验证失败返回false */public static boolean checkPostcode(String postcode) {String regex = "[1-9]\\d{5}";return Pattern.matches(regex, postcode);}/** * 判断邮箱是否合法 *  * @param email * @return */public static boolean checkEmail(String email) {if (null == email || "".equals(email))return false;Pattern p = Pattern.compile("\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*");// 复杂匹配Matcher m = p.matcher(email);return m.matches();}/** * 判断密码:以字母开头,长度在6~18之间,只能包含字符、数字和下划线 *  * @param zipString * @return */public static boolean checkPassword(String pwdString) {if (null == pwdString || "".equals(pwdString))return false;Pattern p = Pattern.compile("^[a-zA-Z]\\w{5,17}$");Matcher m = p.matcher(pwdString);return m.matches();}/** * 判断IP地址格式和范围 *  * @param zipString * @return */public static boolean checkIP(String ip) {if (ip.length() < 7 || ip.length() > 15 || "".equals(ip))return false;Pattern p = Pattern.compile("([1-9]|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])(\\.(\\d|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])){3}");Matcher mat = p.matcher(ip);return mat.find();}/** * 功能:身份证的有效验证 *  * @param IDStr *            身份证号 * @return 有效:true 无效:false * @throws ParseException * @throws java.text.ParseException * @throws NumberFormatException * @throws java.text.ParseException */@SuppressLint("SimpleDateFormat")public boolean IDCardValidate(String IDStr) throws NumberFormatException,java.text.ParseException {String errorInfo = "";// 记录错误信息String[] ValCodeArr = { "1", "0", "x", "9", "8", "7", "6", "5", "4","3", "2" };String[] Wi = { "7", "9", "10", "5", "8", "4", "2", "1", "6", "3", "7","9", "10", "5", "8", "4", "2" };String Ai = "";// ================ 号码的长度 15位或18位 ================if (IDStr.length() != 15 && IDStr.length() != 18) {errorInfo = "号码长度应该为15位或18位。";System.out.println(errorInfo);return false;}// ================ 数字 除最后以外都为数字 ================if (IDStr.length() == 18) {Ai = IDStr.substring(0, 17);} else if (IDStr.length() == 15) {Ai = IDStr.substring(0, 6) + "19" + IDStr.substring(6, 15);}if (isNumeric(Ai) == false) {errorInfo = "15位号码都应为数字 ; 18位号码除最后一位外,都应为数字。";System.out.println(errorInfo);return false;}// ================ 出生年月是否有效 ================String strYear = Ai.substring(6, 10);// 年份String strMonth = Ai.substring(10, 12);// 月份String strDay = Ai.substring(12, 14);// 月份if (this.isDate(strYear + "-" + strMonth + "-" + strDay) == false) {errorInfo = "生日无效。";System.out.println(errorInfo);return false;}GregorianCalendar gc = new GregorianCalendar();SimpleDateFormat s = new SimpleDateFormat("yyyy-MM-dd");if ((gc.get(Calendar.YEAR) - Integer.parseInt(strYear)) > 150|| (gc.getTime().getTime() - s.parse(strYear + "-" + strMonth + "-" + strDay).getTime()) < 0) {errorInfo = "生日不在有效范围。";System.out.println(errorInfo);return false;}if (Integer.parseInt(strMonth) > 12 || Integer.parseInt(strMonth) == 0) {errorInfo = "月份无效";System.out.println(errorInfo);return false;}if (Integer.parseInt(strDay) > 31 || Integer.parseInt(strDay) == 0) {errorInfo = "日期无效";System.out.println(errorInfo);return false;}// ================ 地区码是否有效 ================@SuppressWarnings("rawtypes")Hashtable h = GetAreaCode();if (h.get(Ai.substring(0, 2)) == null) {errorInfo = "地区编码错误。";System.out.println(errorInfo);return false;}// ================ 判断最后一位的值 ================int TotalmulAiWi = 0;for (int i = 0; i < 17; i++) {TotalmulAiWi = TotalmulAiWi+ Integer.parseInt(String.valueOf(Ai.charAt(i)))* Integer.parseInt(Wi[i]);}int modValue = TotalmulAiWi % 11;String strVerifyCode = ValCodeArr[modValue];Ai = Ai + strVerifyCode;if (IDStr.length() == 18) {if (Ai.equals(IDStr) == false) {errorInfo = "身份证无效,最后一位字母错误";System.out.println(errorInfo);return false;}} else {System.out.println("所在地区:" + h.get(Ai.substring(0, 2).toString()));System.out.println("新身份证号:" + Ai);return true;}System.out.println("所在地区:" + h.get(Ai.substring(0, 2).toString()));return true;}/** * 功能:设置地区编码 *  * @return Hashtable 对象 */@SuppressWarnings({ "unchecked", "rawtypes" })private Hashtable GetAreaCode() {Hashtable hashtable = new Hashtable();hashtable.put("11", "北京");hashtable.put("12", "天津");hashtable.put("13", "河北");hashtable.put("14", "山西");hashtable.put("15", "内蒙古");hashtable.put("21", "辽宁");hashtable.put("22", "吉林");hashtable.put("23", "黑龙江");hashtable.put("31", "上海");hashtable.put("32", "江苏");hashtable.put("33", "浙江");hashtable.put("34", "安徽");hashtable.put("35", "福建");hashtable.put("36", "江西");hashtable.put("37", "山东");hashtable.put("41", "河南");hashtable.put("42", "湖北");hashtable.put("43", "湖南");hashtable.put("44", "广东");hashtable.put("45", "广西");hashtable.put("46", "海南");hashtable.put("50", "重庆");hashtable.put("51", "四川");hashtable.put("52", "贵州");hashtable.put("53", "云南");hashtable.put("54", "西藏");hashtable.put("61", "陕西");hashtable.put("62", "甘肃");hashtable.put("63", "青海");hashtable.put("64", "宁夏");hashtable.put("65", "新疆");hashtable.put("71", "台湾");hashtable.put("81", "香港");hashtable.put("82", "澳门");hashtable.put("91", "国外");return hashtable;}/** *  * 功能:判断字符串是否为数字 *  * @param str * @return */private boolean isNumeric(String str) {Pattern pattern = Pattern.compile("[0-9]*");Matcher isNum = pattern.matcher(str);if (isNum.matches()) {return true;} else {return false;}}/** *  * 功能:判断字符串是否为日期格式 *  * @param str * @return */public boolean isDate(String strDate) {Pattern pattern = Pattern.compile("^((\\d{2}(([02468][048])|([13579][26]))[\\-\\/\\s]?((((0?[13578])|(1[02]))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])))))|(\\d{2}(([02468][1235679])|([13579][01345789]))[\\-\\/\\s]?((((0?[13578])|(1[02]))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\\-\\/\\s]?((0?[1-9])|(1[0-9])|(2[0-8]))))))(\\s(((0?[0-9])|([1-2][0-3]))\\:([0-5]?[0-9])((\\s)|(\\:([0-5]?[0-9])))))?$");Matcher m = pattern.matcher(strDate);if (m.matches()) {return true;} else {return false;}}/** *  * 功能:在判定已经是正确的身份证号码之后,查找出身份证所在地区 idCard 身份证号码 所在地区 */@SuppressWarnings("unchecked")public String GetArea(String idCard) {Hashtable ht = GetAreaCode();String area = ht.get(idCard.substring(0, 2));return area;}/** * 功能:在判定已经是正确的身份证号码之后,查找出此人性别 idCard 身份证号码 男或者女 */public String GetSex(String idCard) {String sex = "";if (idCard.length() == 15)sex = idCard.substring(idCard.length() - 3, idCard.length());if (idCard.length() == 18)sex = idCard.substring(idCard.length() - 4, idCard.length() - 1);System.out.println(sex);int sexNum = Integer.parseInt(sex) % 2;if (sexNum == 0) {return "女";}return "男";}/** * 功能:在判定已经是正确的身份证号码之后,查找出此人出生日期 idCard 身份证号码 出生日期 XXXX MM-DD */public String GetBirthday(String idCard) {String Ain = "";if (idCard.length() == 18) {Ain = idCard.substring(0, 17);} else if (idCard.length() == 15) {Ain = idCard.substring(0, 6) + "19" + idCard.substring(6, 15);}// ================ 出生年月是否有效 ================String strYear = Ain.substring(6, 10);// 年份String strMonth = Ain.substring(10, 12);// 月份String strDay = Ain.substring(12, 14);// 日期return strYear + "-" + strMonth + "-" + strDay;}}


更多相关文章

  1. Android常用功能代码块
  2. Android 模拟返回键功能
  3. android之具有选择功能的AlertDialog
  4. 实现类似Android联系人搜索功能
  5. Android中 实现输入框搜索,清楚历史记录的功能
  6. android闹钟(三):实现时钟功能
  7. ScrollNumber 数字滚动
  8. Android实现手写板和涂鸦功能
  9. android 计算器,纯手打,功能实现了,bug可能还有点

随机推荐

  1. Android地图中根据缩放级别显示Marker
  2. Android学习进阶路线导航线路(Android源
  3. android 加载已经安装的apk方式
  4. 应用开发中的风格和主题(style,themes)
  5. Activity背景全透明
  6. Android事件分发机制分析
  7. android 根据经纬度定位所在城市
  8. Android:短信发送器
  9. Android(安卓)Studio的NDK的两种编译方式
  10. android - 购物车页面【仿】京东App