/**
* 判断是否是邮箱
* 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;
}