1、身份证号码验证
package xxx;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Random;
/**
* 身份证验证的工具(支持15位或18位省份证)
* 身份证号码结构:
*
* 根据〖中华人民共和国国家标准GB11643-1999〗中有关公民身份号码的规定,公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成。
* 排列顺序从左至右依次为:6位数字地址码,8位数字出生日期码,3位数字顺序码和1位数字校验码。
*
* 地址码(前6位):表示对象常住户口所在县(市、镇、区)的行政区划代码,按GB/T2260的规定执行。
*
前1、2位数字表示:所在省份的代码;
* 第3、4位数字表示:所在城市的代码;
* 第5、6位数字表示:所在区县的代码;
*
* 出生日期码,(第7位 - 14位):表示编码对象出生年、月、日,按GB按GB/T7408的规定执行,年、月、日代码之间不用分隔符。
*
* 顺序码(第15位至17位):表示在同一地址码所标示的区域范围内,对同年、同月、同日出生的人编订的顺序号,顺序码的奇数分配给男性,偶数分配给女性。
*
第15、16位数字表示:所在地的派出所的代码;
* 第17位数字表示性别:奇数表示男性,偶数表示女性;
* 第18位数字是校检码:也有的说是个人信息码,一般是随计算机的随机产生,用来检验身份证的正确性。校检码可以是0~9的数字,有时也用x表示。
*
* 校验码(第18位数):
*
* 十七位数字本体码加权求和公式 s = sum(Ai*Wi), i = 0..16,先对前17位数字的权求和;
* Ai:表示第i位置上的身份证号码数字值.Wi:表示第i位置上的加权因子.Wi: 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2;
* 计算模 Y = mod(S, 11)
* 通过模得到对应的模 Y: 0 1 2 3 4 5 6 7 8 9 10 校验码: 1 0 X 9 8 7 6 5 4 3 2
*
* 计算步骤:
* 1.将前17位数分别乘以不同的系数。从第1位到第17位的系数分别为:7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2
* 2.将这17位数字和系数相乘的结果相加。
* 3.用加出来和除以11,看余数是多少
* 4.余数只可能有0 1 2 3 4 5 6 7 8 9 10这11个数字,分别对应的最后一位身份证的号码为:1 0 X 9 8 7 6 5 4 3
*
*/
public class IDCardUtil
{
/**
*
* 省、直辖市代码表:
* 11 : 北京 12 : 天津 13 : 河北 14 : 山西 15 : 内蒙古
* 21 : 辽宁 22 : 吉林 23 : 黑龙江 31 : 上海 32 : 江苏
* 33 : 浙江 34 : 安徽 35 : 福建 36 : 江西 37 : 山东
* 41 : 河南 42 : 湖北 43 : 湖南 44 : 广东 45 : 广西 46 : 海南
* 50 : 重庆 51 : 四川 52 : 贵州 53 : 云南 54 : 西藏
* 61 : 陕西 62 : 甘肃 63 : 青海 64 : 宁夏 65 : 新疆
* 71 : 台湾
* 81 : 香港 82 : 澳门
* 91 : 国外
*
*/
final static String CITY_CODE[] = {"11", "12", "13", "14", "15", "21", "22", "23", "31", "32", "33", "34", "35", "36", "37", "41", "42", "43", "44", "45", "46", "50", "51", "52", "53", "54", "61", "62", "63", "64", "65", "71", "81", "82", "91"};
/**
* 效验码
*/
final static char[] PARITYBIT = {'1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'};
/**
* 加权因子
* Math.pow(2, i - 1) % 11
*/
final static int[] POWER = {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2};
/**
* 身份证验证
*
* @param id 号码内容
* @return 是否有效
*/
public final static boolean isValid(String id)
{
if (id == null)
return false;
int len = id.length();
if (len != 15 && len != 18)
return false;
//校验区位码
if (!validCityCode(id.substring(0, 2)))
return false;
//校验生日
if (!validDate(id))
return false;
if (len == 15)
return true;
//校验位数
return validParityBit(id);
}
private static boolean validParityBit(String id)
{
char[] cs = id.toUpperCase().toCharArray();
int power = 0;
for (int i = 0; i < cs.length; i++)
{
//最后一位可以是X
if (i == cs.length - 1 && cs[i] == 'X')
break;
// 非数字
if (cs[i] < '0' || cs[i] > '9')
return false;
// 加权求和
if (i < cs.length - 1)
{
power += (cs[i] - '0') * POWER[i];
}
}
return PARITYBIT[power % 11] == cs[cs.length - 1];
}
private static boolean validDate(String id)
{
try
{
String birth = id.length() == 15 ? "19" + id.substring(6, 12) : id.substring(6, 14);
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
Date birthDate = sdf.parse(birth);
if (!birth.equals(sdf.format(birthDate)))
return false;
}
catch (ParseException e)
{
return false;
}
return true;
}
private static boolean validCityCode(String cityCode)
{
for (String code : CITY_CODE)
{
if (code.equals(cityCode))
return true;
}
return false;
}
/**
* 将15位的身份证转成18位身份证
*
* @param id
* @return
*/
final public static String id15To18(String id)
{
if (id == null || id.length() != 15)
return null;
if (!isValid(id))
return null;
String id17 = id.substring(0, 6) + "19" + id.substring(6);
int power = 0;
char[] cs = id17.toCharArray();
for (int i = 0; i < cs.length; i++)
{
power += (cs[i] - '0') * POWER[i];
}
// 将前17位与第18位校验码拼接
return id17 + String.valueOf(PARITYBIT[power % 11]);
}
/**
* 生成随机整数
*
*
* @param min
* @param max
* @return
*/
public static int rand(int min, int max)
{
Random random = new Random();
return random.nextInt(max + 1) % (max - min + 1) + min;
}
public final static String generateID()
{
// 地址码
String body = CITY_CODE[rand(0, CITY_CODE.length - 1)] + "0101";
// 出生年
String y = String.valueOf(rand(1950, Calendar.getInstance().get(Calendar.YEAR)));
String m = String.valueOf(rand(1, 12));
if (m.length() == 1)
m = "0" + m;
String d = String.valueOf(rand(1, 28));
if (d.length() == 1)
d = "0" + d;
String idx = String.valueOf(rand(1, 999));
if (idx.length() == 1)
idx = "00" + idx;
else if (idx.length() == 2)
idx = "0" + idx;
body += y + m + d + idx;
// 累加body部分与位置加权的积
int power = 0;
char[] cs = body.toCharArray();
for (int i = 0; i < cs.length; i++)
{
power += (cs[i] - '0') * POWER[i];
}
// 得出校验码
return body + String.valueOf(PARITYBIT[power % 11]);
}
}
2、正则表达式大全
package xxxxx;
import org.apache.commons.lang.StringUtils;
public class ValidUtils {
private static final String mobile = "^(13|15|18|17|16)[0-9]{9}$";
private static final String codeAndMobile = "^\\+[0-9]{2}\\-(13|15|18|17|16)[0-9]{9}$";
/**整数*/
private static final String intege="^-?[1-9]\\d*$";
/** 正整数*/
private static final String intege1="^[1-9]\\d*$";
/** 负整数*/
private static final String intege2="^-[1-9]\\d*$";
/** 数字*/
private static final String num="^([+-]?)\\d*\\.?\\d+$";
/** 正数(正整数 + 0)*/
private static final String num1="^[1-9]\\d*|0$";
/** 负数(负整数 + 0)*/
private static final String num2="^-[1-9]\\d*|0$";
/** 浮点数*/
private static final String decmal="^([+-]?)\\d*\\.\\d+$";
/** 正浮点数*/
private static final String decmal1="^[1-9]\\d*.\\d*|0.\\d*[1-9]\\d*$";
/** 负浮点数*/
private static final String decmal2="^-([1-9]\\d*.\\d*|0.\\d*[1-9]\\d*)$";
/** 浮点数*/
private static final String decmal3="^-?([1-9]\\d*.\\d*|0.\\d*[1-9]\\d*|0?.0+|0)$";
/** 非负浮点数(正浮点数 + 0)*/
private static final String decmal4="^[1-9]\\d*.\\d*|0.\\d*[1-9]\\d*|0?.0+|0$";
/**非正浮点数(负浮点数 + 0) */
private static final String decmal5="^(-([1-9]\\d*.\\d*|0.\\d*[1-9]\\d*))|0?.0+|0$";
/** 邮件*/
private static final String email="^\\w+((-\\w+)|(\\.\\w+))*\\@[A-Za-z0-9]+((\\.|-)[A-Za-z0-9]+)*\\.[A-Za-z0-9]+$";
/** 颜色*/
private static final String color="^[a-fA-F0-9]{6}$";
/** url*/
private static final String url="^http[s]?=\\/\\/([\\w-]+\\.)+[\\w-]+([\\w-./?%&=]*)?$";
/** 仅中文*/
private static final String chinese="^[\\u4E00-\\u9FA5\\uF900-\\uFA2D]+$";
/** 仅ACSII字符*/
private static final String ascii="^[\\x00-\\xFF]+$";
/**邮编 */
private static final String zipcode="^\\d{6}$";
/** ip地址*/
private static final String ip4="^(25[0-5]|2[0-4]\\d|[0-1]\\d{2}|[1-9]?\\d)\\.(25[0-5]|2[0-4]\\d|[0-1]\\d{2}|[1-9]?\\d)\\.(25[0-5]|2[0-4]\\d|[0-1]\\d{2}|[1-9]?\\d)\\.(25[0-5]|2[0-4]\\d|[0-1]\\d{2}|[1-9]?\\d)$";
/** 非空*/
private static final String notempty="^\\S+$";
/**图片 */
private static final String picture="(.*)\\.(jpg|bmp|gif|ico|pcx|jpeg|tif|png|raw|tga)$";
/** 压缩文件*/
private static final String rar="(.*)\\.(rar|zip|7zip|tgz)$";
/** 日期*/
private static final String date="^\\d{4}(\\-|\\/|\\.)\\d{1,2}\\1\\d{1,2}$";
/** QQ号码*/
private static final String qq="^[1-9]*[1-9][0-9]*$";
/** 电话号码的函数(包括验证国内区号;国际区号;分机号)*/
private static final String tel="^(([0\\+]\\d{2,3}-)?(0\\d{2,3})-)?(\\d{7,8})(-(\\d{1,}))?$";
/** 用来用户注册。匹配由数字、26个英文字母或者下划线组成的字符串*/
private static final String username="^\\w+$";
/** 字母*/
private static final String letter="^[A-Za-z]+$";
private static final String letterAndSpace="^[A-Za-z ]+$";
/** 大写字母*/
private static final String letter_u="^[A-Z]+$";
/** 小写字母*/
private static final String letter_l="^[a-z]+$";
/** 身份证*/
private static final String idcard="^[1-9]([0-9]{14}|[0-9]{17})$";
/**判断字符串是否为浮点数*/
private static final String isFloat="^[-]?\\d+(\\.\\d+)?$";
/**判断字符串是否为正浮点数*/
private static final String isUFloat="^\\d+(\\.\\d+)?$";
/**判断是否是整数*/
private static final String isInteger="^[-]?\\d+$";
/**判断是否是正整数*/
private static final String isUInteger="^\\d+$";
/**判断车辆Vin码*/
private static final String isCarVin="^[1234567890WERTYUPASDFGHJKLZXCVBNM]{13}[0-9]{4}$";
/** 手机号 */
public static boolean isMobile(String input){
return matches(mobile, input);
}
public static boolean isCodeAndMobile(String input){
return matches(codeAndMobile, input);
}
/** 整数 */
public static boolean isIntege(String input){
return matches(intege, input);
}
/** 正整数 */
public static boolean isintege1(String input){
return matches(intege1, input);
}
/** 负整数*/
public static boolean isIntege2(String input){
return matches(intege2, input);
}
/** 数字 */
public static boolean isNum(String input){
return matches(num, input);
}
/** 正数(正整数 + 0) */
public static boolean isNum1(String input){
return matches(num1, input);
}
/** 负数(负整数 + 0)*/
public static boolean isNum2(String input){
return matches(num2, input);
}
/** 浮点数*/
public static boolean isDecmal(String input){
return matches(decmal, input);
}
/** 正浮点数*/
public static boolean isDecmal1(String input){
return matches(decmal1, input);
}
/** 负浮点数*/
public static boolean isDecmal2(String input){
return matches(decmal2, input);
}
/**浮点数 */
public static boolean isDecmal3(String input){
return matches(decmal3, input);
}
/** 非负浮点数(正浮点数 + 0)*/
public static boolean isDecmal4(String input){
return matches(decmal4, input);
}
/** 非正浮点数(负浮点数 + 0)*/
public static boolean isDecmal5(String input){
return matches(decmal5, input);
}
/** 邮件*/
public static boolean isEmail(String input){
return matches(email, input);
}
/** 颜色*/
public static boolean isColor(String input){
return matches(color, input);
}
/** url*/
public static boolean isUrl(String input){
return matches(url, input);
}
/** 中文*/
public static boolean isChinese(String input){
return matches(chinese, input);
}
/** ascii码*/
public static boolean isAscii(String input){
return matches(ascii, input);
}
/** 邮编*/
public static boolean isZipcode(String input){
return matches(zipcode, input);
}
/** IP地址*/
public static boolean isIP4(String input){
return matches(ip4, input);
}
/** 非空*/
public static boolean isNotEmpty(String input){
return matches(notempty, input);
}
/** 图片*/
public static boolean isPicture(String input){
return matches(picture, input);
}
/** 压缩文件*/
public static boolean isRar(String input){
return matches(rar, input);
}
/** 日期*/
public static boolean isDate(String input){
return matches(date, input);
}
/** qq*/
public static boolean isQQ(String input){
return matches(qq, input);
}
/** 电话号码的函数(包括验证国内区号;国际区号;分机号)*/
public static boolean isTel(String input){
return matches(tel, input);
}
/** 用来用户注册。匹配由数字、26个英文字母或者下划线组成的字符串*/
public static boolean isUserName(String input){
return matches(username, input);
}
/**字母*/
public static boolean isLetter(String input){
return matches(letter, input);
}
public static boolean isLetterAndSpace(String input){
return matches(letterAndSpace, input);
}
/** 小写字母*/
public static boolean isLowLetter(String input){
return matches(letter_l, input);
}
/** 大写字母*/
public static boolean isUpperLetter(String input){
return matches(letter_u, input);
}
/** 身份证*/
public static boolean isIDCard(String input){
return matches(idcard, input);
}
public static boolean isFloat(String input){
return matches(isFloat, input);
}
public static boolean isUFloat(String input){
return matches(isUFloat, input);
}
public static boolean isInteger(String input){
return matches(isInteger, input);
}
public static boolean isUInteger(String input){
return matches(isUInteger, input);
}
public static boolean isCarVin(String carVin){
return matches(isCarVin, carVin);
}
public static boolean matches(String regex,String input){
if(StringUtils.isBlank(input)) return false;
if(input.matches(regex))return true;
return false;
}
public static void main(String[] args) {
/*System.out.println(isInteger("1"));
System.out.println(isInteger("0"));
System.out.println(isInteger("-1"));
System.out.println(isInteger("1.0"));
System.out.println("--------------------");
System.out.println(isUInteger("-1"));
System.out.println(isUInteger("0"));
System.out.println(isUInteger("10"));
System.out.println(isUInteger("1.3"));*/
System.out.println(isLetterAndSpace("tai wan"));
}
}
3、常用日期工具类
package xxxxx;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.regex.Pattern;
public class DateUtil {
private static final int[] DAY_OF_MONTH = new int[] { 31, 28, 31, 30, 31,
30, 31, 31, 30, 31, 30, 31 };
/**
*
* @param strDate
* 输入日期
* @param dayNum
* 相隔天数 正整数表示前推 ,负整数表示后推
* @return 日期字符串
* @throws ParseException
*/
public static String getDifferDate(String strDate, int dayNum)
throws ParseException {
SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd");
Date date = sf.parse(strDate);
Calendar c = Calendar.getInstance();
c.setTime(date);
c.add(Calendar.DATE, dayNum);
String sqldate = sf.format(c.getTime());
return sqldate;
}
/**
* 取得当前日期相隔dayNum天的日期
*
* @param strDate
* @param dayNum
* @return
* @throws ParseException
*/
public static String getDifferDate(int dayNum) throws ParseException {
Date date = new Date();
SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd");
Calendar c = Calendar.getInstance();
c.setTime(date);
c.add(Calendar.DATE, dayNum);
String strDate = sf.format(c.getTime());
return strDate;
}
/**
* 把日期字符串转换为util.date类型
*
* @param strDate
* 日期字符串(yyyy-MM-dd)
*
*
* @return java.sql.date 类型
*/
public static java.util.Date getDate(String strDate) {
return java.sql.Date.valueOf(strDate);
}
/**
* 校验日期YYYY-MM-DD格式是否正确
*
* @param date
* @return
*/
public static boolean checkDateForm(String date) {
if (date == null || "".equals(date))
return false;
String eL = "^((\\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]))))))";
return Pattern.compile(eL).matcher(date).matches();
}
/**
* 取得指定天数后的时间
*
* @param date
* 基准时间
* @param dayAmount
* 指定天数,允许为负数
* @return 指定天数后的时间
*/
public static Date addDay(Date date, int dayAmount) {
if (date == null) {
return null;
}
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.DATE, dayAmount);
return calendar.getTime();
}
/**
* 取得指定小时数后的时间
*
* @param date
* 基准时间
* @param hourAmount
* 指定小时数,允许为负数
* @return 指定小时数后的时间
*/
public static Date addHour(Date date, int hourAmount) {
if (date == null) {
return null;
}
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.HOUR, hourAmount);
return calendar.getTime();
}
/**
* 取得指定分钟数后的时间
*
* @param date
* 基准时间
* @param minuteAmount
* 指定分钟数,允许为负数
* @return 指定分钟数后的时间
*/
public static Date addMinute(Date date, int minuteAmount) {
if (date == null) {
return null;
}
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.MINUTE, minuteAmount);
return calendar.getTime();
}
/**
* 比较两日期对象中的小时和分钟部分的大小.
*
* @param date
* 日期对象1, 如果为 null
会以当前时间的日期对象代替
* @param anotherDate
* 日期对象2, 如果为 null
会以当前时间的日期对象代替
* @return 如果日期对象1大于日期对象2, 则返回大于0的数; 反之返回小于0的数; 如果两日期对象相等, 则返回0.
*/
public static int compareHourAndMinute(Date date, Date anotherDate) {
if (date == null) {
date = new Date();
}
if (anotherDate == null) {
anotherDate = new Date();
}
Calendar cal = Calendar.getInstance();
cal.setTime(date);
int hourOfDay1 = cal.get(Calendar.HOUR_OF_DAY);
int minute1 = cal.get(Calendar.MINUTE);
cal.setTime(anotherDate);
int hourOfDay2 = cal.get(Calendar.HOUR_OF_DAY);
int minute2 = cal.get(Calendar.MINUTE);
if (hourOfDay1 > hourOfDay2) {
return 1;
} else if (hourOfDay1 == hourOfDay2) {
// 小时相等就比较分钟
return minute1 > minute2 ? 1 : (minute1 == minute2 ? 0 : -1);
} else {
return -1;
}
}
/**
* 比较两日期对象的大小, 忽略秒, 只精确到分钟.
*
* @param date
* 日期对象1, 如果为 null
会以当前时间的日期对象代替
* @param anotherDate
* 日期对象2, 如果为 null
会以当前时间的日期对象代替
* @return 如果日期对象1大于日期对象2, 则返回大于0的数; 反之返回小于0的数; 如果两日期对象相等, 则返回0.
*/
public static int compareIgnoreSecond(Date date, Date anotherDate) {
if (date == null) {
date = new Date();
}
if (anotherDate == null) {
anotherDate = new Date();
}
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
date = cal.getTime();
cal.setTime(anotherDate);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
anotherDate = cal.getTime();
return date.compareTo(anotherDate);
}
/**
* 取得当前时间的字符串表示,格式为2006-01-10 20:56:30.756
*
* @return 当前时间的字符串表示
*/
public static String currentDate2String() {
return date2String(new Date());
}
/**
* 取得当前时间的字符串表示,格式为2006-01-10
*
* @return 当前时间的字符串表示
*/
public static String currentDate2StringByDay() {
return date2StringByDay(new Date());
}
/**
* 取得今天的最后一个时刻
*
* @return 今天的最后一个时刻
*/
public static Date currentEndDate() {
return getEndDate(new Date());
}
/**
* 取得今天的第一个时刻
*
* @return 今天的第一个时刻
*/
public static Date currentStartDate() {
return getStartDate(new Date());
}
/**
* 把时间转换成字符串,格式为2006-01-10 20:56:30.756
*
* @param date
* 时间
* @return 时间字符串
*/
public static String date2String(Date date) {
return date2String(date, "yyyy-MM-dd HH:mm:ss.SSS");
}
/**
* 按照指定格式把时间转换成字符串,格式的写法类似yyyy-MM-dd HH:mm:ss.SSS
*
* @param date
* 时间
* @param pattern
* 格式
* @return 时间字符串
*/
public static String date2String(Date date, String pattern) {
if (date == null) {
return null;
}
return (new SimpleDateFormat(pattern)).format(date);
}
/**
* 把时间转换成字符串,格式为2006-01-10
*
* @param date
* 时间
* @return 时间字符串
*/
public static String date2StringByDay(Date date) {
return date2String(date, "yyyy-MM-dd");
}
/**
* 把时间转换成字符串,格式为2006-01-10 20:56
*
* @param date
* 时间
* @return 时间字符串
*/
public static String date2StringByMinute(Date date) {
return date2String(date, "yyyy-MM-dd HH:mm");
}
/**
* 把时间转换成字符串,格式为2006-01-10 20:56:30
*
* @param date
* 时间
* @return 时间字符串
*/
public static String date2StringBySecond(Date date) {
return date2String(date, "yyyy-MM-dd HH:mm:ss");
}
/**
* 根据某星期几的英文名称来获取该星期几的中文数.
* e.g. monday -> 一 sunday -> 日
*
* @param englishWeekName
* 星期的英文名称
* @return 星期的中文数
*/
public static String getChineseWeekNumber(String englishWeekName) {
if ("monday".equalsIgnoreCase(englishWeekName)) {
return "一";
}
if ("tuesday".equalsIgnoreCase(englishWeekName)) {
return "二";
}
if ("wednesday".equalsIgnoreCase(englishWeekName)) {
return "三";
}
if ("thursday".equalsIgnoreCase(englishWeekName)) {
return "四";
}
if ("friday".equalsIgnoreCase(englishWeekName)) {
return "五";
}
if ("saturday".equalsIgnoreCase(englishWeekName)) {
return "六";
}
if ("sunday".equalsIgnoreCase(englishWeekName)) {
return "日";
}
return null;
}
/**
* 根据指定的年, 月, 日等参数获取日期对象.
*
* @param year
* 年
* @param month
* 月
* @param date
* 日
* @return 对应的日期对象
*/
public static Date getDate(int year, int month, int date) {
return getDate(year, month, date, 0, 0);
}
/**
* 根据指定的年, 月, 日, 时, 分等参数获取日期对象.
*
* @param year
* 年
* @param month
* 月
* @param date
* 日
* @param hourOfDay
* 时(24小时制)
* @param minute
* 分
* @return 对应的日期对象
*/
public static Date getDate(int year, int month, int date, int hourOfDay,
int minute) {
return getDate(year, month, date, hourOfDay, minute, 0);
}
/**
* 根据指定的年, 月, 日, 时, 分, 秒等参数获取日期对象.
*
* @param year
* 年
* @param month
* 月
* @param date
* 日
* @param hourOfDay
* 时(24小时制)
* @param minute
* 分
* @param second
* 秒
* @return 对应的日期对象
*/
public static Date getDate(int year, int month, int date, int hourOfDay,
int minute, int second) {
Calendar cal = Calendar.getInstance();
cal.set(year, month - 1, date, hourOfDay, minute, second);
cal.set(Calendar.MILLISECOND, 0);
return cal.getTime();
}
/**
* 取得某个日期是星期几,星期日是1,依此类推
*
* @param date
* 日期
* @return 星期几
*/
public static int getDayOfWeek(Date date) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
return cal.get(Calendar.DAY_OF_WEEK);
}
/**
* 获取某天的结束时间, e.g. 2005-10-01 23:59:59.999
*
* @param date
* 日期对象
* @return 该天的结束时间
*/
public static Date getEndDate(Date date) {
if (date == null) {
return null;
}
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.set(Calendar.HOUR_OF_DAY, 23);
cal.set(Calendar.MINUTE, 59);
cal.set(Calendar.SECOND, 59);
cal.set(Calendar.MILLISECOND, 999);
return cal.getTime();
}
/**
* 取得一个月最多的天数
*
* @param year
* 年份
* @param month
* 月份,0表示1月,依此类推
* @return 最多的天数
*/
public static int getMaxDayOfMonth(int year, int month) {
if (month == 1 && isLeapYear(year)) {
return 29;
}
return DAY_OF_MONTH[month];
}
/**
* 得到指定日期的下一天
*
* @param date
* 日期对象
* @return 同一时间的下一天的日期对象
*/
public static Date getNextDay(Date date) {
return addDay(date, 1);
}
/**
* 获取某天的起始时间, e.g. 2005-10-01 00:00:00.000
*
* @param date
* 日期对象
* @return 该天的起始时间
*/
public static Date getStartDate(Date date) {
if (date == null) {
return null;
}
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
return cal.getTime();
}
/**
* 根据日期对象来获取日期中的时间(HH:mm:ss).
*
* @param date
* 日期对象
* @return 时间字符串, 格式为: HH:mm:ss
*/
public static String getTime(Date date) {
if (date == null) {
return null;
}
SimpleDateFormat format = new SimpleDateFormat("HH:mm:ss");
return format.format(date);
}
/**
* 根据日期对象来获取日期中的时间(HH:mm).
*
* @param date
* 日期对象
* @return 时间字符串, 格式为: HH:mm
*/
public static String getTimeIgnoreSecond(Date date) {
if (date == null) {
return null;
}
SimpleDateFormat format = new SimpleDateFormat("HH:mm");
return format.format(date);
}
/**
* 判断是否是闰年
*
* @param year
* 年份
* @return 是true,否则false
*/
public static boolean isLeapYear(int year) {
Calendar calendar = Calendar.getInstance();
return ((GregorianCalendar) calendar).isLeapYear(year);
}
/**
* 取得一年中的第几周。
*
* @param date
* @return
*/
public static int getWeekOfYear(Date date) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
return cal.get(Calendar.WEEK_OF_YEAR);
}
/**
* 获取上周的指定星期的日期。
*
* @param dayOfWeek
* 星期几,取值范围是 {@link Calendar#MONDAY} - {@link Calendar#SUNDAY}
*/
public static Date getDateOfPreviousWeek(int dayOfWeek) {
if (dayOfWeek > 7 || dayOfWeek < 1) {
throw new IllegalArgumentException("参数必须是1-7之间的数字");
}
return getDateOfRange(dayOfWeek, -7);
}
/**
* 获取本周的指定星期的日期。
*
* @param dayOfWeek
* 星期几,取值范围是 {@link Calendar#MONDAY} - {@link Calendar#SUNDAY}
*/
public static Date getDateOfCurrentWeek(int dayOfWeek) {
if (dayOfWeek > 7 || dayOfWeek < 1) {
throw new IllegalArgumentException("参数必须是1-7之间的数字");
}
return getDateOfRange(dayOfWeek, 0);
}
/**
* 获取下周的指定星期的日期。
*
* @param dayOfWeek
* 星期几,取值范围是 {@link Calendar#MONDAY} - {@link Calendar#SUNDAY}
*/
public static Date getDateOfNextWeek(int dayOfWeek) {
if (dayOfWeek > 7 || dayOfWeek < 1) {
throw new IllegalArgumentException("参数必须是1-7之间的数字");
}
return getDateOfRange(dayOfWeek, 7);
}
private static Date getDateOfRange(int dayOfWeek, int dayOfRange) {
Calendar cal = Calendar.getInstance();
cal.set(Calendar.DAY_OF_WEEK, dayOfWeek);
cal.set(Calendar.DATE, cal.get(Calendar.DATE) + dayOfRange);
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
return cal.getTime();
}
public static void main(String[] args) {
// Date date =DateUtil.getDate("2017-01-17");
// Date date = new Date();
SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println(sf.format(new Date()));
}
}
4、图片高报真缩放工具类
package xxxx;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import javax.imageio.ImageIO;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGEncodeParam;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
public class NarrowImage {
/**
* @param im
* 原始图像
* @param resizeTimes
* 倍数,比如0.5就是缩小一半,0.98等等double类型
* @return 返回处理后的图像
*/
public BufferedImage zoomImage(String src) {
BufferedImage result = null;
try {
File srcfile = new File(src);
if (!srcfile.exists()) {
System.out.println("文件不存在");
}
BufferedImage im = ImageIO.read(srcfile);
/* 原始图像的宽度和高度 */
int width = im.getWidth();
int height = im.getHeight();
// 压缩计算
float resizeTimes = 0.3f; /* 这个参数是要转化成的倍数,如果是1就是转化成1倍 */
/* 调整后的图片的宽度和高度 */
int toWidth = (int) (width * resizeTimes);
int toHeight = (int) (height * resizeTimes);
/* 新生成结果图片 */
result = new BufferedImage(toWidth, toHeight, BufferedImage.TYPE_INT_RGB);
result.getGraphics().drawImage(im.getScaledInstance(toWidth, toHeight, java.awt.Image.SCALE_SMOOTH), 0, 0,
null);
} catch (Exception e) {
System.out.println("创建缩略图发生异常" + e.getMessage());
}
return result;
}
public boolean writeHighQuality(BufferedImage im, String fileFullPath) {
try {
/* 输出到文件流 */
FileOutputStream newimage = new FileOutputStream(fileFullPath);
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(newimage);
JPEGEncodeParam jep = JPEGCodec.getDefaultJPEGEncodeParam(im);
/* 压缩质量 */
jep.setQuality(0.9f, true);
encoder.encode(im, jep);
/* 近JPEG编码 */
newimage.close();
return true;
} catch (Exception e) {
return false;
} finally {
// 压缩完毕后,删除原文件
File file = new File(fileFullPath);
// 如果文件路径所对应的文件存在,并且是一个文件,则直接删除
if (file.exists() && file.isFile()) {
if (file.delete()) {
System.out.println("删除文件" + fileFullPath + "成功!");
} else {
System.out.println("删除文件" + fileFullPath + "失败!");
}
} else {
System.out.println("删除文件失败:" + fileFullPath + "不存在!");
}
}
}
/**
* 测试图片压缩
*
* @param args
*/
public static void main(String[] args) {
String inputFoler = "C:\\Users\\PC\\Desktop\\bcfb1f83-ee77-4e82-bf2f-48905b1089b1.jpg";
/* 这儿填写你存放要缩小图片的文件夹全地址 */
String outputFolder = "C:\\Users\\PC\\Desktop\\T-bcfb1f83-ee77-4e82-bf2f-48905b1089b1.jpg";
/* 这儿填写你转化后的图片存放的文件夹 */
NarrowImage narrowImage = new NarrowImage();
narrowImage.writeHighQuality(narrowImage.zoomImage(inputFoler), outputFolder);
}
}
5、文件类工具类
package xxxx;
import org.springframework.util.Assert;
import java.io.*;
import java.math.BigDecimal;
import java.util.LinkedList;
import java.util.Properties;
/**
* 文件操作工具类
*
*/
public final class FileUtil {
/**
* @param path path
* @return p
* @throws IOException io
* @author jiangzeyin
*/
public static Properties getProperties(String path) throws IOException {
Properties prop = new Properties();
InputStream in = new FileInputStream(path);
prop.load(in);
return prop;
}
/**
* 格式化单位
*
* @param size size
* @return str
*/
public static String getFormatSize(long size) {
double kiloByte = size / 1024;
if (kiloByte < 1) {
return size + "Byte";
}
double megaByte = kiloByte / 1024;
if (megaByte < 1) {
BigDecimal result1 = new BigDecimal(Double.toString(kiloByte));
return result1.setScale(2, BigDecimal.ROUND_HALF_UP).toPlainString() + "KB";
}
double gigaByte = megaByte / 1024;
if (gigaByte < 1) {
BigDecimal result2 = new BigDecimal(Double.toString(megaByte));
return result2.setScale(2, BigDecimal.ROUND_HALF_UP).toPlainString() + "MB";
}
double teraBytes = gigaByte / 1024;
if (teraBytes < 1) {
BigDecimal result3 = new BigDecimal(Double.toString(gigaByte));
return result3.setScale(2, BigDecimal.ROUND_HALF_UP).toPlainString() + "GB";
}
BigDecimal result4 = new BigDecimal(teraBytes);
return result4.setScale(2, BigDecimal.ROUND_HALF_UP).toPlainString() + "TB";
}
/**
* 判断文件是否存在
*
* @param path path
* @return boolean
*/
public static boolean exists(String path) {
File f = new File(path);
return f.exists();
}
/**
* 创建文件路径
*
* @param path path
* @return boolean
* @author jiangzeyin
*/
public static boolean mkdirs(String path) {
return mkdirs(new File(path), path.endsWith("/"));
}
/**
* @param file file
* @param isPath isPath
* @return boolean
* @author jiangzeyin
*/
public static boolean mkdirs(File file, boolean isPath) {
if (file == null)
return false;
if (isPath)
return file.mkdirs();
else
return file.getParentFile().mkdirs();
}
public static boolean mkdirs(File file) {
return mkdirs(file, false);
}
/**
* 读取文件全部内容
*
* @param file file
* @param encoding encoding
* @return str
* @throws IOException io
*/
public static String readToString(File file, String encoding) throws IOException {
BufferedReader br;
StringBuffer stringBuffer = null;
br = new BufferedReader(new InputStreamReader(new FileInputStream(file), encoding));
String line = null;
stringBuffer = new StringBuffer();
while ((line = br.readLine()) != null) {
stringBuffer.append(line);
}
br.close();
return stringBuffer.toString();// 返回文件内容,默认编码
}
public static String readToString(File file) throws IOException {
return readToString(file, "UTF-8");
}
public static String getFileEncode(String path) throws IOException {
String charset = "asci";
byte[] first3Bytes = new byte[3];
boolean checked = false;
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(path));
bis.mark(0);
int read = bis.read(first3Bytes, 0, 3);
if (read == -1)
return charset;
if (first3Bytes[0] == (byte) 0xFF && first3Bytes[1] == (byte) 0xFE) {
charset = "Unicode";// UTF-16LE
checked = true;
} else if (first3Bytes[0] == (byte) 0xFE && first3Bytes[1] == (byte) 0xFF) {
charset = "Unicode";// UTF-16BE
checked = true;
} else if (first3Bytes[0] == (byte) 0xEF && first3Bytes[1] == (byte) 0xBB && first3Bytes[2] == (byte) 0xBF) {
charset = "UTF8";
checked = true;
}
bis.reset();
if (!checked) {
while ((read = bis.read()) != -1) {
if (read >= 0xF0)
break;
if (0x80 <= read && read <= 0xBF) // 单独出现BF以下的,也算是GBK
break;
if (0xC0 <= read && read <= 0xDF) {
read = bis.read();
if (0x80 <= read && read <= 0xBF)
// 双字节 (0xC0 - 0xDF) (0x80 - 0xBF),也可能在GB编码内
continue;
else
break;
} else if (0xE0 <= read && read <= 0xEF) { // 也有可能出错,但是几率较小
read = bis.read();
if (0x80 <= read && read <= 0xBF) {
read = bis.read();
if (0x80 <= read && read <= 0xBF) {
charset = "UTF-8";
break;
} else
break;
} else
break;
}
}
// TextLogger.getLogger().info(loc + " " +
// Integer.toHexString(read));
}
bis.close();
return charset;
}
public static String readFile(String path) throws IOException {
// 判断文件是否存在
File file = new File(path);
if (!file.exists()) {
return null;
}
String data = null;
// 获取文件编码格式
String code = FileUtil.getFileEncode(path);
InputStreamReader isr = null;
// 根据编码格式解析文件
if ("asci".equals(code)) {
// 这里采用GBK编码,而不用环境编码格式,因为环境默认编码不等于操作系统编码
// code = System.getProperty("file.encoding");
code = "GBK";
}
isr = new InputStreamReader(new FileInputStream(file), code);
// 读取文件内容
int length = -1;
char[] buffer = new char[1024];
StringBuffer sb = new StringBuffer();
while ((length = isr.read(buffer, 0, 1024)) != -1) {
sb.append(buffer, 0, length);
}
data = new String(sb);
isr.close();
return data;
}
/**
* 读取文件
*
* @param fileName fileName
* @param encoding encoding
* @return strng
* @throws Exception e
* @author jiangzeyin
*/
public static String readToString(String fileName, String encoding) throws Exception {
File file = new File(fileName);
Long filelength = file.length();
byte[] filecontent = new byte[filelength.intValue()];
FileInputStream in = new FileInputStream(file);
in.read(filecontent);
in.close();
return new String(filecontent, encoding);
}
/**
* 读取文件全部内容
*
* 默认为UTF-8
*
* @param fileName fileName
* @return str
* @throws Exception e
* @author jiangzeyin
*/
public static String readToString(String fileName) throws Exception {
return readToString(fileName, "UTF-8");
}
/**
* 写文件
*
* @param fileName fileName
* @param content content
* @throws IOException io
* @author jiangzeyin
*/
public static void writeFile(String fileName, String content) throws IOException {
appendFileContext(fileName, content, false);
}
/**
* 添加文件内容
*
* @param fileName file
* @param content c
* @throws IOException io
* @author jiangzeyin
*/
public static void appendFileContext(String fileName, String content) throws IOException {
appendFileContext(fileName, content, true);
}
/**
* 追加文件内容
*
* @param fileName fileName
* @param content c
* @param append 是否是追加
* @throws IOException io
* @author jiangzeyin
*/
public static void appendFileContext(String fileName, String content, boolean append) throws IOException {
File file = new File(fileName);
file.getParentFile().mkdirs();
Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file), "UTF8"));
if (content != null)
out.write(content);
out.close();
}
public static boolean writeInputStream(InputStream inputStream, String path) throws IOException {
return writeInputStream(inputStream, new File(path));
}
/**
* @param inputStream inp
* @param file file
* @return boolean
* @throws IOException io
*/
public static boolean writeInputStream(InputStream inputStream, File file) throws IOException {
Assert.notNull(inputStream);
Assert.notNull(file);
mkdirs(file);
DataOutputStream outputStream = null;
try {
outputStream = new DataOutputStream(new FileOutputStream(file));
int len = inputStream.available();
//判断长度是否大于1M
if (len <= 1024 * 1024) {
byte[] bytes = new byte[len];
inputStream.read(bytes);
outputStream.write(bytes);
} else {
int byteCount = 0;
//1M逐个读取
byte[] bytes = new byte[1024 * 1024];
while ((byteCount = inputStream.read(bytes)) != -1) {
outputStream.write(bytes, 0, byteCount);
}
}
} finally {
if (inputStream != null)
inputStream.close();
if (outputStream != null)
outputStream.close();
}
return true;
}
/**
* 判断流的字符串格式
*
* @param ins ins
* @return str
* @throws IOException io
*/
public static String getCharset(InputStream ins) throws IOException {
BufferedInputStream bin = new BufferedInputStream(ins);
int p = (bin.read() << 8) + bin.read();
String code = null;
switch (p) {
case 0xefbb:
code = "UTF-8";
break;
case 0xfffe:
code = "Unicode";
break;
case 0xfeff:
code = "UTF-16BE";
break;
default:
code = "GBK";
}
ins.close();
bin.close();
return code;
}
/**
* 获取文件 编码
*
* @param fileName fileName
* @return str
* @throws IOException io
* @author jiangzeyin
*/
public static String getFileCharset(String fileName) throws IOException {
FileInputStream ins = new FileInputStream(fileName);
return getCharset(ins);
}
public static String getFilePath(String path) {
File file = new File(path);
return getFilePath(file);
}
public static String getFilePath(File file) {
return clearPath(file.getParent());
}
/**
* 获取文件后缀
*
* @param filename file
* @return str
* @author jiangzeyin
*/
public static String getFileExt(String filename) {
String ext = "";
int index = filename.lastIndexOf(".");
if (index == -1) {
return "";
}
ext = filename.substring(index + 1);
return ext;
}
public static String clearPath(String input) {
input = input.replace('\\', '/');
return clearPath_(input);
}
/**
* 获取文件名
*
* @param filename file
* @return s
* @author jiangzeyin
*/
public static String getFileName(String filename) {
String ext = "";
int index = filename.lastIndexOf("/");
if (index == -1) {
return filename;
}
ext = filename.substring(index + 1);
return ext;
}
private static String clearPath_(String input) {
int from = 0;
int j = input.indexOf("://");
if (j != -1) {
from = j + 3;
}
int i = input.indexOf("//", from);
if (i == -1) {
return input;
}
String input_ = input.substring(0, i) + "/" + input.substring(i + 2);
return clearPath_(input_);
}
/**
* 递归删除目录下的所有文件及子目录下所有文件
*
* @param dir 将要删除的文件目录
* @return boolean Returns "true" if all deletions were successful. If a
* deletion fails, the method stops attempting to delete and returns
* "false".
*/
public static boolean deleteDir(File dir) {
if (dir.isDirectory()) {
String[] children = dir.list();
// 递归删除目录中的子目录下
for (int i = 0; i < (children != null ? children.length : 0); i++) {
boolean success = deleteDir(new File(dir, children[i]));
if (!success) {
return false;
}
}
}
// 目录此时为空,可以删除
return dir.delete();
}
/**
* 获取指定目录下的所有文件
*
* @param path path
* @return LinkedList
* @author XiangZhongBao
*/
public static LinkedList getFolderFiles(String path) {
File file = new File(path);
if (!file.exists())
return null;
if (!file.isDirectory())
return null;
File[] files = file.listFiles();
if (files == null)
return null;
LinkedList linkedList = new LinkedList<>();
for (File item : files) {
if (item.isDirectory()) {
LinkedList tempFile = getFolderFiles(item.getPath());
if (tempFile != null)
linkedList.addAll(tempFile);
} else {
linkedList.add(item);
}
}
return linkedList;
}
/**
* @param dir dir
* @return boolean
* @author jiangzeyin
*/
public static boolean deleteDir(String dir) {
return deleteDir(new File(dir));
}
}