package com.fufan.mtsaas.tools;

import java.math.BigDecimal;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 验证工具类
 *
 * @author Liby
 * @create 2018-01-18
 */
public class VerificationTool {

    /**
     * 验证金额是否为数字  支持整数和小数
     * @param amt
     * @return
	 *
	 * @Time 2018-01-22
	 * @author Liby
     */
    public static boolean isnum(String amt){
		return match("[0-9]+(.[0-9]+)?",amt);
    }

	/**
     * 验证是否为日期格式
     * @param date
     * @return
	 *
	 * @Time 2018-01-22
	 * @author Liby
     */
    public static boolean isday(String date){
		return match("\\d{4}-\\d{2}-\\d{2}",date);
    }

	/**
	 * 验证数据是否为20,1|2位
	 * @param amount
	 * @return
	 *
	 * @Time 2018-01-22
	 * @author Liby
	 */
	public static boolean isAmount(String amount){
    	return match("^([1-9][\\d]{0,19}|0)(\\.[\\d]{1,2})?$",amount);
	}


    /**
     * 验证金额  此方法无法验证小数后面小数位
     * @param amount（22,2）
     * @return boolean
     */
    public static boolean isAmountValid(BigDecimal amount) {
    	if (amount == null || amount.doubleValue() < 0
    			|| amount.scale() > 2 || amount.doubleValue() > 99999999999999999999.99) {
    		return false;
		}
		return true;
	}
    
    /**
     * 验证利率(后台)
     * @param rate （13,6）
     * @return boolean
     */
    public static boolean isBRateValid(BigDecimal rate) {
    	if (rate == null || rate.doubleValue() < 0
    			|| rate.scale() > 6 || rate.doubleValue() > 9999999.999999) {
    		return false;
		}
		return true;
	}
    
    /**
     * 验证利率(前台)
     * @param rate （13,4）
     * @return boolean
     */
    public static boolean isFRateValid(BigDecimal rate) {
    	if (rate == null || rate.doubleValue() < 0
    			|| rate.scale() > 4 || rate.doubleValue() > 999999999.9999) {
    		return false;
		}
		return true;
	}

	/**
	 * 邮箱验证
	 * 1、只能有一个@
	 * 2、不能同时出现2个@
	 * 3、@后面两个点不能连续
	 * 附域名
	 * .com （商业机构）；
	 * .net （从事互联网服务的机构）；
	 * .org （非赢利性组织）；
	 * .com.cn （国内商业机构）；
	 * .net.cn （国内互联网机构）；
	 * .org.cn （国内非赢利性组织）；
	 * .gov(国家政府机构)
	 *
	 * @Time 2018-01-22
	 * @author Liby
	 */
	public static boolean isEmailFromat(List<String> mails){
//		String regex =  "^\\w+((-\\w+)|(\\.\\w+))*\\@[A-Za-z0-9]+((\\.|-)[A-Za-z0-9]+)*\\.[A-Za-z0-9]+$";
		String regex = "\\@[A-Za-z0-9]+((\\.|-)[A-Za-z0-9]+)*\\.[A-Za-z0-9]+$";
		for (String mail : mails) {
			if (match(regex,mail.substring(mail.indexOf("@"),mail.length()-1))){
				return true;
			}
		}
		return false;

	}

	/**
	 * 正则表达式
	 * @param regex
	 * 正则表达式字符串
	 * @param str
	 * 要匹配的字符串
	 * @return 如果str 符合 regex的正则表达式格式,返回true, 否则返回 false;
	 *
	 * @Time 2018-01-22
	 * @author Liby
	 */
	private static boolean match(String regex, String str) {
		Pattern pattern = Pattern.compile(regex);
		Matcher matcher = pattern.matcher(str);
		return matcher.matches();
	}

	/**
	 * 获取指定字符串出现的次数
	 * @param srcText 源字符串
	 * @param findText 要查找的字符串
	 * @return
	 *
	 * @Time 2018-01-22
	 * @author Liby
	 */
	public static int appearNumber(String srcText, String findText) {
		int count = 0;
		Pattern p = Pattern.compile(findText);
		Matcher m = p.matcher(srcText);
		while (m.find()) {
			count++;
		}
		return count;
	}
}
