package com.mosty.hczx.utils; import com.mosty.base.utils.DateUtils; import org.apache.commons.codec.binary.Base64; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import javax.servlet.http.HttpServletRequest; import java.util.*; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * * 字符串处理类
* * @author redstorm * @version 2011-3-15 * */ public class StringUtils { private static Logger logger = LogManager.getLogger(StringUtils.class); public static final String enterNewline = String.valueOf((char) 13) + String.valueOf((char) 10); // windows下的换行符 public static final String enterNewline_linux = String.valueOf((char) 10); // linux下的换行符 public StringUtils() { } /** * null 转换为空字符串
* * @param temp * 需要转换的字符串 * @return String */ public static String nullToStr(String temp) { if (temp == null) temp = ""; return temp; } /** * 判断字符串是否为空,空格、回车符、换行符、Tab符默认为空
* * @param str * 判断的字符串 * @return boolean 返回是否为空(为null时返回true) */ public static boolean isBlank(String temp) { boolean returnValue = true; if (temp != null) { returnValue = temp.matches("\\s*"); } return returnValue; } /** * 两个字符串连接,null 按空字符串处理
* * @param str1 * 字符串1 * @param str2 * 字符串2 * @return String */ public static String stringConcat(String str1, String str2) { String temp = ""; if (str1 != null) { temp = str1; } if (str2 != null) { temp = temp.concat(str2); } return temp; } /** * 返回字符串分割后的字符串数组,不同于 String.split() 方法,可以正确的得到特殊字符的分割结果
* * @param str * 被分割的字符串 * @param splitStr * 分割符,可以是一个字符串 * @return String[] */ public static String[] split(String str, String splitStr) { List coll = new ArrayList(); if (str != null && !"".equals(str) && splitStr != null && !"".equals(splitStr)) { String tempStr = str; int at = tempStr.indexOf(splitStr); while (at != -1) { coll.add(tempStr.substring(0, at)); tempStr = tempStr.substring(at + splitStr.length()); at = tempStr.indexOf(splitStr); } coll.add(tempStr); } return (String[]) coll.toArray(new String[0]); } /** * 去掉字符串的单引号与双引号
* * @param str * @return String */ public static String clearMark(String str) { String returnValue = ""; if (str != null && !"".equals(str)) { returnValue = str.replaceAll("'", ""); returnValue = returnValue.replaceAll("\"", ""); } return returnValue; } /** * 文本字符串转换成HTML格式
* * @param str * 需要转换的字符串
  • & 转换成 &
  • 空格 转换成  
  • " 转换成 " *
  • < 转换成 &lt;
  • >转换成 &gt;
  • \n 转换成 <br> * @return String */ public static String txtToHtml(String str) { String returnValue = ""; if (str != null && !"".equals(str)) { returnValue = str.replaceAll("&", "&"); returnValue = returnValue.replaceAll(" ", " "); returnValue = returnValue.replaceAll("\"", """); returnValue = returnValue.replaceAll("<", "<"); returnValue = returnValue.replaceAll(">", ">"); returnValue = returnValue.replaceAll("\n", "
    "); } return returnValue; } /** * 文本字符串转换成HTML格式
    * (不替换 &符号) * * @param str * 需要转换的字符串
  • 空格 转换成 &nbsp;
  • " 转换成 &quot;
  • < 转换成 &lt;
  • > * 转换成 &gt;
  • \n 转换成 <br> * @return String */ public static String txtToHtml2(String str) { String returnValue = ""; if (str != null && !"".equals(str)) { returnValue = str.replaceAll(" ", " "); returnValue = returnValue.replaceAll("\"", """); returnValue = returnValue.replaceAll("<", "<"); returnValue = returnValue.replaceAll(">", ">"); returnValue = returnValue.replaceAll("\n", "
    "); } return returnValue; } /** * HTML格式的字符串转换成文本格式
    * * @param str * 需要转换的字符串
  • &amp; 转换成 &
  • &nbsp; 转换成 空格
  • &quot; 转换成 " *
  • &lt; 转换成 <
  • &gt; 转换成 >
  • <br> 转换成 \n
  • <br/> 转换成 \n * @return String */ public static String htmlToTxt(String str) { String returnValue = ""; if (str != null && !"".equals(str)) { returnValue = returnValue.replaceAll("
    ", "\n"); returnValue = returnValue.replaceAll("
    ", "\n"); returnValue = returnValue.replaceAll("<", "<"); returnValue = returnValue.replaceAll(">", ">"); returnValue = returnValue.replaceAll(" ", " "); returnValue = returnValue.replaceAll("&", "&"); returnValue = returnValue.replaceAll(""", "\""); } return returnValue; } /** * 当前字符转换行符转换成空格
    * * @param str * 需要转换的字符串 (char)13 + (char)10 转换成 空格 * @return String */ public static String enterToSpace(String str) { String returnValue = ""; if (str != null && !"".equals(str)) { returnValue = str.replaceAll("\n", " "); returnValue = returnValue.replaceAll(enterNewline, " "); returnValue = returnValue .replaceAll(String.valueOf((char) 13), " "); } return returnValue; } /** * 当前字符转换行符转换成空格
    * * @param str * 需要转换的字符串 (char)13 + (char)10 转换成 空字符串 * @return String */ public static String enterToEmpty(String str) { String returnValue = ""; if (str != null && !"".equals(str)) { returnValue = str.replaceAll("\n", ""); returnValue = returnValue.replaceAll(enterNewline, ""); returnValue = returnValue.replaceAll(String.valueOf((char) 13), ""); } return returnValue; } /** * 取得SQL中的条件表达式
    * * @param str * 需要转换的字符串 '(单引号) 转换成 ''(两个单引号,SQL中默认两个单引号为一个单引号字符) * @return String */ public static String getSqlExpression(String str) { String returnValue = ""; if (str != null && !"".equals(str)) { returnValue = str.replaceAll("'", "''"); } return returnValue; } /** * 当前字符转换行符转换成回车符
    * * @param str * 需要转换的字符串 (char)13 + (char)10 转换成 (char)13 回车符 * @return String */ public static String enterConvert(String str) { String returnValue = ""; if (str != null && !"".equals(str)) { returnValue = str.replaceAll(enterNewline, String .valueOf((char) 13)); } return returnValue; } /** * 取得JS的字符串(主要处理特殊字符)
    * * @param str * @return String */ public static String getStringForJS(String str) { String returnValue = ""; if (str != null && !"".equals(str)) { returnValue = str; returnValue = returnValue.replaceAll("\\\\", "\\\\\\\\"); returnValue = returnValue.replaceAll("\"", "\\\\\""); returnValue = returnValue.replaceAll(enterNewline, "\\n"); returnValue = returnValue.replaceAll(String.valueOf((char) 13), "\\n"); returnValue = returnValue.replaceAll("\n", "\\n"); } return returnValue; } /** * 取得JS要替换的字符串正则表达式(主要处理特殊字符)
    * * @param str * @return String */ public static String getStringForJSReplace(String str) { String returnValue = ""; if (str != null && !"".equals(str)) { returnValue = str; returnValue = returnValue.replaceAll("\\\\", "\\\\\\\\\\\\\\\\"); returnValue = returnValue.replaceAll("\"", "\\\\\\\\\""); returnValue = returnValue.replaceAll(enterNewline, "\\\\\\\\n"); returnValue = returnValue.replaceAll(String.valueOf((char) 13), "\\\\\\\\n"); returnValue = returnValue.replaceAll("\n", "\\\\\\\\n"); } return returnValue; } /** * 取得当前URL完整地址,包括参数字符串
    * * @param request * 当前的 request 对象 * @return String */ public static String getCurURL(HttpServletRequest request) { String returnValue = request.getRequestURI(); String queryString = request.getQueryString(); if (queryString != null) { returnValue = returnValue + "?" + queryString; } return returnValue; } /** * 取得当前URL替换后的完整地址
    *
    * (注意:如替换的参数名不存则增加,参数值为中文直接用URLEncode方法转换,queryString中如有多个相同的参数则同时替换) * * @param request * 当前的 request 对象 * @param parameterMap * 替换的参数名与值的Map集合 * @return String */ @SuppressWarnings("rawtypes") public static String getCurURLReplaced(HttpServletRequest request, Map parameterMap) { String requestUri = request.getRequestURI(); String queryString = request.getQueryString(); return getCurURLReplaced(requestUri, queryString, parameterMap); } /** * 取得当前URL替换后的完整地址
    *
    * (注意:如替换的参数名不存则增加,参数值为中文直接用URLEncode方法转换,queryString中如有多个相同的参数则同时替换) * * @param requestUri * 当前的请求地址 * @param queryString * 当前请求地址中的get参数字符串 * @param parameterMap * 替换的参数名与值的Map集合 * @return String */ @SuppressWarnings({ "rawtypes", "unchecked" }) public static String getCurURLReplaced(String requestUri, String queryString, Map parameterMap) { String returnValue = ""; requestUri = nullToStr(requestUri); if (parameterMap == null || parameterMap.isEmpty()) { // 参数为空 if (queryString == null || "".equals(queryString)) { returnValue = requestUri; } else { returnValue = requestUri + "?" + queryString; } } else { String key, value; if (queryString == null || "".equals(queryString)) { // 本身没有参数 StringBuffer sb = new StringBuffer(); Iterator iterator = parameterMap.keySet().iterator(); while (iterator.hasNext()) { // 不存在的新增 key = (String) iterator.next(); value = (String) parameterMap.get(key); if (sb.length() == 0) { sb.append("?"); } else { sb.append("&"); } sb.append(key + "=" + URLEncode(value)); } returnValue = requestUri + sb.toString(); } else { // 本身有参数 StringBuffer sb = new StringBuffer(); String[] tempArray = queryString.split("&"); Map addMap = new HashMap(parameterMap); for (int i = 0; i < tempArray.length; i++) { String[] keyArray = tempArray[i].split("="); key = keyArray[0]; sb.append("&"); if (parameterMap.containsKey(key)) { value = (String) parameterMap.get(key); sb.append(key + "=" + URLEncode(value)); addMap.remove(key); } else { sb.append(tempArray[i]); } } Iterator iterator = addMap.keySet().iterator(); while (iterator.hasNext()) { // 不存在的新增 key = (String) iterator.next(); value = (String) addMap.get(key); sb.append("&" + key + "=" + URLEncode(value)); } returnValue = requestUri + "?" + sb.toString().substring(1); } } return returnValue; } /** * 中文字符串转换,转成 ISO8859-1 编码格式
    * * @param str * @return String */ public static String getCharSetISO8859(String str) { try { if (str == null) return ""; String tempStr = str; byte[] tempArray = tempStr.getBytes("ISO8859-1"); String temp = new String(tempArray); return temp; } catch (Exception ex) { logger.error("中文字符串转换出错ISO8859: " + ex.getMessage(), ex); } return ""; } /** * 中文字符串转换,GBK转成 UTF8 编码格式
    * * @param str * @return String */ public static String getGBK_UTF8(String str) { try { if (str == null) return ""; String tempStr = str; byte[] tempArray = tempStr.getBytes("GBK"); String temp = new String(tempArray, "UTF-8"); return temp; } catch (Exception ex) { logger.error("中文字符串转换出错GBK_UTF8: " + ex.getMessage(), ex); } return ""; } /** * 中文字符串转换,UTF8转成GBK 编码格式
    * * @param str * @return String */ public static String getUTF8_GBK(String str) { try { if (str == null) return ""; String tempStr = str; byte[] tempArray = tempStr.getBytes("UTF-8"); String temp = new String(tempArray, "GBK"); return temp; } catch (Exception ex) { logger.error("中文字符串转换出错UTF8_GBK: " + ex.getMessage(), ex); } return ""; } /** * URL中的中文字符串转换
    * *

    * 说明:没有通过页面提交的,则用java.net.URLDecoder.decode(str, "UTF-8")还原 *

    * * @param str * @return String */ public static String URLEncode(String str) { String returnValue = ""; try { if (str != null) { returnValue = java.net.URLEncoder.encode(str, "UTF-8"); } } catch (Exception ex) { logger.error("URL中的中文字符串转换出错: " + ex.getMessage(), ex); } return returnValue; } /** * URL中的中文字符串还原
    * *

    * 说明:直接用URLEncode()的返回值调用该方法是无效的,必须是在请求页面中调用才能还原,因为页面请求是按 ISO8859-1 格式编码的 *

    * * @param str * @return String */ public static String URLDecode(String str) { String returnValue = ""; try { if (str != null) { byte[] tempArray = str.getBytes("ISO8859-1"); returnValue = new String(tempArray, "UTF-8"); } } catch (Exception ex) { logger.error("URL中的中文字符串还原出错: " + ex.getMessage(), ex); } return returnValue; } /** * 取得字符串长度(一个汉字为两个字符长度)
    * * @param sourceStr * 需要处理的字符串 * @return long */ public static long getStringLength(String sourceStr) { long returnValue = 0; if (sourceStr == null) { return (returnValue); } for (int i = 0; i < sourceStr.length(); i++) { char[] tempChar = sourceStr.substring(i, i + 1).toCharArray(); if ((int) tempChar[0] > 255) returnValue += 2; else returnValue++; } return returnValue; } /** * 取得重复次数的字符串
    * * @param sourceStr * 重复源 * @param repeatTimes * 重复次数 * @return String */ public static String getRepeatString(String sourceStr, long repeatTimes) { if (repeatTimes == 0) { return ""; } StringBuffer returnStr = new StringBuffer(); for (int i = 0; i < repeatTimes; i++) { returnStr.append(sourceStr); } return returnStr.toString(); } /** * 取得指定长度的左字符串,不足长度的以 replaceString 右填充
    * * @param sourceStr * 需要处理的字符串 * @param specityLength * 指定长度(一个汉字为两个字符长度,如果截断地方为一个汉字,则可能长度小1) * @param replaceString * 不足长度时填充的字符 * @return String */ public static String getLeftSpecifyString(String sourceStr, long specityLength, String replaceString) { if (sourceStr == null) { return (getRepeatString(replaceString, specityLength)); } long realLength = getStringLength(sourceStr); StringBuffer returnStr = new StringBuffer(); if (realLength < specityLength) { returnStr.append(sourceStr); returnStr.append(getRepeatString(replaceString, specityLength - realLength)); } else { returnStr.append(getLeftString(sourceStr, specityLength)); } return returnStr.toString(); } /** * 取得字符串的左子串,长度由 leftLength 指定
    * * @param sourceStr * 需要处理的字符串 * @param leftLength * 指定长度,从左边取该长度(一个汉字为两个字符长度,如果截断地方为一个汉字,则可能长度小1) * @return String */ public static String getLeftString(String sourceStr, long leftLength) { StringBuffer returnStr = new StringBuffer(); long tempLength = 0; for (int i = 0; i < sourceStr.length(); i++) { String tempStr = sourceStr.substring(i, i + 1); char[] tempChar = tempStr.toCharArray(); if ((int) tempChar[0] > 255) tempLength += 2; else tempLength++; if (tempLength < leftLength) { returnStr.append(tempStr); } else { if (tempLength == leftLength) returnStr.append(tempStr); break; } } return returnStr.toString(); } /** * 取得指定长度的右字符串,不足长度的以 replaceString 左填充
    * * @param sourceStr * 需要处理的字符串 * @param specityLength * 指定长度(一个汉字为两个字符长度,如果截断地方为一个汉字,则可能长度小1) * @param replaceString * 不足长度时填充的字符 * @return String */ public static String getRightSpecifyString(String sourceStr, long specityLength, String replaceString) { if (sourceStr == null) { return (getRepeatString(replaceString, specityLength)); } long realLength = getStringLength(sourceStr); StringBuffer returnStr = new StringBuffer(); if (realLength < specityLength) { returnStr.append(getRepeatString(replaceString, specityLength - realLength)); returnStr.append(sourceStr); } else { returnStr.append(getRightString(sourceStr, specityLength)); } return returnStr.toString(); } /** * 取得字符串的右子串,长度由 leftLength 指定
    * * @param sourceStr * 需要处理的字符串 * @param rightLength * 指定长度,从右边取该长度(一个汉字为两个字符长度,如果截断地方为一个汉字,则可能长度小1) * @return String */ public static String getRightString(String sourceStr, long rightLength) { StringBuffer returnStr = new StringBuffer(); long tempLength = 0; for (int i = sourceStr.length() - 1; i >= 0; i--) { String tempStr = sourceStr.substring(i, i + 1); char[] tempChar = tempStr.toCharArray(); if ((int) tempChar[0] > 255) tempLength += 2; else tempLength++; if (tempLength < rightLength) { returnStr.insert(0, tempStr); } else { if (tempLength == rightLength) returnStr.insert(0, tempStr); break; } } return returnStr.toString(); } /** * 取得指定长度的字符串,长度由 targetlength 指定
    * * @param sourceString * 需要处理的字符串 * @param targetlength * 指定长度,从左边取该长度(一个汉字为两个字符长度) * @return String */ public static String displayTitle(String sourceString, long targetlength) { String returnValue = ""; if (sourceString != null) { if (getStringLength(sourceString) <= targetlength * 2) returnValue = sourceString; else returnValue = getLeftString(sourceString, (targetlength - 1) * 2) + "…"; } return returnValue; } /** * 把格式化的日期转换为没有分隔符的字数日期 * * @param s * @return */ public static String changeTime(String s) { String time = ""; if (!"".equals(s)) { String[] ss = s.split(" "); if (ss.length == 2) { String[] sss = ss[0].split("-"); String[] sss2 = ss[1].split(":"); for (int i = 0; i < sss.length; i++) { time = time + sss[i]; } for (int i = 0; i < sss2.length; i++) { time = time + sss2[i]; } } else if (ss.length == 1) { String[] sss = ss[0].split("-"); if (sss.length == 1) { time = sss[0]; } else { for (int i = 0; i < sss.length; i++) { time = time + sss[i]; } } } } return time; } /** * 取得人民币大写金额
    * * @param money * @return String */ public static String getChineseMoney(double money) { if (money > 999999999999999.99 || money < 0) { // 不符合的数值 return ""; } if (money == 0) { return "零元整"; } StringBuffer returnValue = new StringBuffer(); String chinaDigital[] = new String[] { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" }; String chinaUnit[] = new String[] { "仟", "佰", "拾", "万", "仟", "佰", "拾", "亿", "仟", "佰", "拾", "万", "仟", "佰", "拾", "", "元", "角", "分" }; java.text.DecimalFormat fmt = new java.text.DecimalFormat(".00"); String moneyStr = fmt.format(money); int moneyLength = moneyStr.length(); String tempChar = ""; int tempInt = 0; int tempAtArray = 0; int zeroCount = 0; // 记0个数 boolean lastZero = false; for (int i = 0; i < moneyLength; i++) { tempChar = moneyStr.substring(i, i + 1); if (".".equals(tempChar)) { if (money >= 1) { returnValue.append("元"); } } else { tempInt = Integer.parseInt(tempChar); tempAtArray = 19 - moneyLength + i; if (tempInt == 0) { // 为零的处理 lastZero = true; zeroCount++; if (tempAtArray == 7 || (tempAtArray % 4 == 3 && zeroCount < 4)) { // 亿必需出现 returnValue.append(chinaUnit[tempAtArray]); zeroCount = 0; } } else { zeroCount = 0; if (lastZero) { if (money >= 1) { returnValue.append(chinaDigital[0]); } } returnValue.append(chinaDigital[tempInt]); returnValue.append(chinaUnit[tempAtArray]); lastZero = false; } } } if (moneyStr.endsWith("0")) { returnValue.append("整"); } return returnValue.toString(); } /** * 判断字符串是否为空,空格、回车符、换行符、Tab符默认为空
    * * @param str * 判断的字符串 * @return boolean 返回是否为空(为null时返回true) */ public static boolean isBlank(Object temp) { boolean returnValue = true; if (temp != null) { if (temp instanceof String) returnValue = temp.toString().matches("\\s*"); else returnValue = false; } return returnValue; } /** * 取得用人民币大写金额表示的整数,格式如: (贰仟零捌万零伍佰壹拾贰)
    * * @param money * @return String */ public static String getChineseNumberAsMoney(long money) { if (money > 999999999999999.99 || money < 0) { // 不符合的数值 return ""; } if (money == 0) { return "零"; } StringBuffer returnValue = new StringBuffer(); String chinaDigital[] = new String[] { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" }; String chinaUnit[] = new String[] { "仟", "佰", "拾", "万", "仟", "佰", "拾", "亿", "仟", "佰", "拾", "万", "仟", "佰", "拾", "", "", "", "" }; java.text.DecimalFormat fmt = new java.text.DecimalFormat(".00"); String moneyStr = fmt.format(money); int moneyLength = moneyStr.length(); String tempChar = ""; int tempInt = 0; int tempAtArray = 0; int zeroCount = 0; // 记0个数 boolean lastZero = false; for (int i = 0; i < moneyLength; i++) { tempChar = moneyStr.substring(i, i + 1); if (".".equals(tempChar)) { if (money >= 1) { // returnValue.append("元"); } } else { tempInt = Integer.parseInt(tempChar); tempAtArray = 19 - moneyLength + i; if (tempInt == 0) { // 为零的处理 lastZero = true; zeroCount++; if (tempAtArray == 7 || (tempAtArray % 4 == 3 && zeroCount < 4)) { // 亿必需出现 returnValue.append(chinaUnit[tempAtArray]); zeroCount = 0; } } else { zeroCount = 0; if (lastZero) { if (money >= 1) { returnValue.append(chinaDigital[0]); } } returnValue.append(chinaDigital[tempInt]); returnValue.append(chinaUnit[tempAtArray]); lastZero = false; } } } return returnValue.toString(); } /** * 取得 0 到 999999999 之间的数字中文字符串,格式如: (二千零八万零五百一十二)
    * * @param num * @return String */ public static String getChineseNumber(long number) { if (number > 999999999 || number < 0) { // 不符合的数值 return ""; } if (number == 0) { return "零"; } StringBuffer returnValue = new StringBuffer(); String chinaDigital[] = new String[] { "零", "一", "二", "三", "四", "五", "六", "七", "八", "九" }; String chinaUnit[] = new String[] { "亿", "千", "百", "十", "万", "千", "百", "十", "" }; String tempStr = "" + number; int numberLength = tempStr.length(); String tempChar = ""; int tempInt = 0; int tempAtArray = 0; int zeroCount = 0; boolean lastZero = false; for (int i = 0; i < numberLength; i++) { tempChar = tempStr.substring(i, i + 1); tempInt = Integer.parseInt(tempChar); tempAtArray = 9 - numberLength + i; if (tempInt == 0) { // 为零的处理 lastZero = true; zeroCount++; if (tempAtArray == 0 || (tempAtArray % 4 == 0 && zeroCount < 4)) { // 亿必需出现 returnValue.append(chinaUnit[tempAtArray]); zeroCount = 0; } } else { zeroCount = 0; if (lastZero) { if (number >= 1) { returnValue.append(chinaDigital[0]); } } returnValue.append(chinaDigital[tempInt]); returnValue.append(chinaUnit[tempAtArray]); lastZero = false; } } return returnValue.toString(); } /** * 将 15 位身份证号码转换为 18 位身份证号码
    * * @param sfzh * @return String */ public static String convertTo18Sfzh(String sfzh) { String returnValue = sfzh; try { if (sfzh.length() == 15) { String tempStr1 = sfzh.substring(0, 6); String tempStr2 = "19" + sfzh.substring(6); String tempStrAll = tempStr1 + tempStr2; int lastAt = 0; for (int i = 0; i < 17; i++) { int bitInt = Integer.parseInt(tempStrAll .substring(i, i + 1)); int bitIntTemp = 1; for (int j = 0; j < 17 - i; j++) { bitIntTemp = (bitIntTemp * 2) % 11; } lastAt += bitInt * bitIntTemp; } lastAt = lastAt % 11; returnValue = tempStrAll + "10X98765432".substring(lastAt, lastAt + 1); } } catch (Exception ex) { logger.error("转换成18位身份证号码出错: " + ex.getMessage(), ex); } return returnValue; } /** * 是否为一个有效的 18 位身份证号码
    * * @param sfzh * @return boolean */ @SuppressWarnings("unused") public static boolean isValidSfzh(String sfzh) { boolean returnValue = false; try { if (!isBlank(sfzh)) { int length = sfzh.length(); if (length == 18) { boolean bitValid = true; for (int i = 0; i < 17; i++) { String bitChar = sfzh.substring(i, i + 1); if ("1234567890".indexOf(bitChar) == -1) { bitValid = false; break; } } if (bitValid) { java.util.Date csrq = DateUtils.stringToDate(sfzh .substring(6, 14), "yyyyMMdd"); int lastAt = 0; for (int i = 0; i < 17; i++) { int bitInt = Integer.parseInt(sfzh.substring(i, i + 1)); int bitIntTemp = 1; for (int j = 0; j < 17 - i; j++) { bitIntTemp = (bitIntTemp * 2) % 11; } lastAt += bitInt * bitIntTemp; } lastAt = lastAt % 11; String checkBit = "10X98765432".substring(lastAt, lastAt + 1); String lastBit = sfzh.substring(17); lastBit = lastBit.toUpperCase(); if (checkBit.equals(lastBit)) { returnValue = true; } } } } } catch (Exception ex) { // logger.error("18 位身份证号码校验出错: " + ex.getMessage(), ex); } return returnValue; } /** * 取得HTML中某个结点替换后的字符串(流程定义保存HTML时用)
    * 说明:搜索到关键字后以<>为前后匹配截取 * * @param htmlString * HTML字符串 * @param searchKey * 搜索关键字 * @param nodeString * 新的结点字符串 * @return String */ public static String getHTMLNodeReplaceString(String htmlString, String searchKey, String nodeString) { String returnValue = htmlString; if (!isBlank(htmlString) && !isBlank(searchKey)) { int foundI = htmlString.indexOf(searchKey); if (foundI != -1) { int startI = htmlString.lastIndexOf("<", foundI); int endI = htmlString.indexOf(">", foundI); if (startI != -1 && endI != -1) { returnValue = htmlString.substring(0, startI) + nullToStr(nodeString) + htmlString.substring(endI + 1); } } } return returnValue; } /** * 生成32位的UUID
    * * @return String */ public static String get32UUID() { UUID uuid = UUID.randomUUID(); String returnValue = uuid.toString(); returnValue = returnValue.replace("-", ""); return returnValue; } //更具所属责任区生成对应SQL public static String GenerationSql(String sszrq){ String[] sszrqArray = sszrq.split(","); StringBuffer sb = new StringBuffer(); sb.append("and ("); for(int i = 0 ; i < sszrqArray.length ; i++ ){ if(null != sszrqArray[i] && !sszrqArray[i].equals("")){ sb.append(" code = '"+ sszrqArray[i] +"' "); if(i != (sszrqArray.length-1)){ sb.append(" or "); } } } sb.append(")"); return sb.toString(); } /** * 去掉字符串中的空格、回车、换行符、制表符 * * replaceBlank (这里用一句话描述这个方法的作用) * TODO(这里描述方法适用条件/执行流程/使用方法/注意事项) * @author Administrator * @datetime 2016-5-3 下午4:50:01 * @param str * @return * @throws (抛出的异常) * @since JDK 1.7 */ public static String replaceBlank(String str) { if (str != null) { Pattern ptn = Pattern.compile("\\s*|\t|\r|\n"); Matcher matcher = ptn.matcher(str); return matcher.replaceAll(""); } return str; } /** * Base64字符串转码至byte数组 * @param str * @return */ public static byte[] getBase64DecodeByte(String str) { byte[] returnValue = (byte[])null; try { if(!StringUtils.isBlank(str)) { returnValue = Base64.decodeBase64(str); } } catch (Exception e) { // logger.error("取得byte数组解码后的BASE64出错: " + ex.getMessage(), ex); } return returnValue; } /** * byte数组转码至Base64字符串 * @param bytes * @return */ public static String getByteToBase64(byte[] bytes) { String returnValue = ""; try { if(bytes != null) { returnValue = Base64.encodeBase64String(bytes); } } catch (Exception e) { // logger.error("取得byte数组解码后的BASE64出错: " + ex.getMessage(), ex); } return returnValue; } }