/** * 判断是否是邮箱 * liuahang@163.com = true * liuahang@.com = false * liuahang163.com = false * @param email * @return */ public static boolean isEmail(String email) { boolean flag = false; if (Pattern .matches( "^[a-zA-Z0-9_//.//$-]{1,20}@[a-zA-Z0-9]{1,10}(//.[a-zA-Z0-9]{1,5}){1,3}$", email)) { return true; } return flag; } /** * 判断是否是手机号 * 第一位必须为1 * 必须为11位数字 * @param mobileNo * @return */ public static boolean isMobileNo(String mobileNo) { boolean flag = false; if (Pattern.matches("^[1][0-9]{10}", mobileNo)) { return true; } return flag; } /** * 验证身份证号码是否合法 1、15位身份证号码组成: ddddddyymmddxxs共15位,其中: * dddddd为6位的地方代码,根据这6位可以获得该身份证号所在地。 yy为2位的年份代码,是身份证持有人的出身年份。 * mm为2位的月份代码,是身份证持有人的出身月份。 dd为2位的日期代码,是身份证持有人的出身日。 这6位在一起组成了身份证持有人的出生日期。 * xx为2位的顺序码,这个是随机数。 s为1位的性别代码,奇数代表男性,偶数代表女性。 * * 2、18位身份证号码组成: ddddddyyyymmddxxsp共18位,其中: * 其他部分都和15位的相同。年份代码由原来的2位升级到4位。最后一位为校验位。 * * @param idCard * @return */ public static boolean isIdCard(String idCard) { /** 身份证号码1-17位求和权重 */ int[] NUMS = { 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 }; /** 校验码结果 */ char[] RESULT = { '1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2' }; boolean isValid = true; int num = 0; int sum = 0; int len = idCard.length(); idCard = idCard.toUpperCase(); if (len != 15 && len != 18) { // 位数不正确 return false; } if (!Pattern.matches("[0-9]{15}|([0-9]{17}[0-9X])", idCard)) { // 格式不对 return false; } if (len == 15) { // 15位身份证规则 return isDate(idCard.substring(6, 12)); } else { // 18位身份证规则 if (isDate(idCard.substring(6, 14))) { for (int i = 0; i < 17; i++) { num = Integer.parseInt(idCard.charAt(i) + ""); sum += (num * NUMS[i]); } char c = RESULT[sum % 11]; if (c != idCard.charAt(17)) { return false; } } else { return false; } } return isValid; } /** * 判断日期字符串是否是有效的日期 * * @param date * 输入日期字符串,格式yymmdd(年份后两位+月日)或yyyymmdd(年月日) * @return */ public static boolean isDate(String date) { boolean flag = true; int len = date.length(); String year = ""; String month = ""; String day = ""; if (len == 6) { year = "19" + date.substring(0, 2); month = date.substring(2, 4); day = date.substring(4); } else { year = date.substring(0, 4); month = date.substring(4, 6); day = date.substring(6); } int yearNum = Integer.parseInt(year); int monthNum = Integer.parseInt(month); int dayNum = Integer.parseInt(day); if (!(yearNum >= 1900 && yearNum <= Calendar.getInstance().get(Calendar.YEAR) + 1900)) { return false; } if (!(monthNum >= 1 && monthNum <= 12)) { return false; } if (monthNum == 4 || monthNum == 6 || monthNum == 9 || monthNum == 11) { if (dayNum > 30) {// 小月天数应不大于30天 return false; } } else if (monthNum == 2) { if (isLeapYear(yearNum)) { if (dayNum > 29) {// 闰年二月天数应不大于29天 return false; } } else { if (dayNum > 28) {// 非闰年二月天数应不大于28天 return false; } } } else { if (dayNum >= 318) {// 其他月份天数应不大于31天 return false; } } return flag; } /** * 判断年份是否是闰年 * * @param yearNum * 4位年份数字 * @return */ public static boolean isLeapYear(int year) { if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) { return true; } else { return false; } } /** * 将字符串进行MD5加密 * @param md5Str 需要加密的字符串 * @return 经MD5加密后的字符串 */ public static String getMD5(String md5Str) { try { MessageDigest md5 = MessageDigest.getInstance("MD5"); byte[] bytes = md5.digest(md5Str.getBytes()); StringBuffer sb = new StringBuffer(); String temp = ""; for (byte b : bytes) { temp = Integer.toHexString(b & 0XFF); sb.append(temp.length() == 1 ? "0" + temp : temp); } return sb.toString(); } catch (NoSuchAlgorithmException e) { return null; } } /** * 将14位时间转换成格式:xxx-xx-xx xx:xx * @return */ public static String formateTradTime(String timeStr) { if(timeStr == null || timeStr.equals("")) { return ""; } if(timeStr.length()<12) { return timeStr; } else { StringBuffer bf = new StringBuffer(); bf.append(timeStr.substring(0, 4)); bf.append("-"); bf.append(timeStr.substring(4,6)); bf.append("-"); bf.append(timeStr.substring(6, 8)); bf.append(" "); bf.append(timeStr.substring(8,10)); bf.append(":"); bf.append(timeStr.substring(10,12)); return bf.toString(); } } /** * 将xxx.xx格式的金额转成12位的报文格式 * @param amount * @return */ public static String amountConverter_UI2Msg(String amount) { if (amount == null) { return null; } char[] chMessageAmount = new char[12]; for (int i = 0; i < chMessageAmount.length; i++) { chMessageAmount[i] = '0'; } String[] splitAmount = splitString(amount, '.'); for (int i = 0; i < splitAmount[0].length(); i++) { chMessageAmount[9 - splitAmount[0].length() + 1 + i] = splitAmount[0].charAt(i); } if (splitAmount.length == 2) { for (int i = 0; i < splitAmount[1].length(); i++) { if (i > 1) { break; } chMessageAmount[10 + i] = splitAmount[1].charAt(i); } } return new String(chMessageAmount); } /** * 将12位的报文金额转化成xxx.xx的格式 * @param messageAmount * @return */ public static String amountConverter_Msg2UI(String messageAmount) { if (messageAmount == null) { return null; } char[] strAmount = messageAmount.toCharArray(); boolean isHeadZero = true; ByteArrayOutputStream baos = new ByteArrayOutputStream(); for (int i = 0; i < strAmount.length; i++) { if (i < (strAmount.length - 3)) { if (strAmount[i] != '0') { isHeadZero = false; } if (!isHeadZero) { baos.write(strAmount[i]); } } else { if (i == (strAmount.length - 2)) { baos.write('.'); } baos.write(strAmount[i]); } } return baos.toString(); } /** * 拆分字符串 * * @param src * 源字符串 * @param signal * 拆分依据 * @return 被拆分的字符串数组 */ public static String[] splitString(String src, char signal) { if (src == null) { return null; } Vector strings = new Vector(); int partIndex = 0; for (int count = 0; count < src.length(); count++) { if (src.toCharArray()[count] == signal) { strings.addElement(src.substring(partIndex, count)); partIndex = count + 1; } } strings.addElement(src.substring(partIndex, src.length())); String[] splittedString = new String[strings.size()]; strings.copyInto(splittedString); return splittedString; }