您的位置:首页 > 其它

校验出生日期,校验身份证格式,校验会员账户:9开头数字,校验手机号码是否合法,判断字符串中的url是否都是图片格式字符串,通过图片url读取图片并将图片转换成base64编码

2017-05-10 16:51 1071 查看
package com.jst.park.util;

import java.io.BufferedInputStream;

import java.io.FileOutputStream;

import java.io.IOException;

import java.net.HttpURLConnection;

import java.net.MalformedURLException;

import java.net.URL;

import java.util.ArrayList;

import java.util.List;

import java.util.regex.Matcher;

import java.util.regex.Pattern;

import org.apache.commons.lang.StringUtils;

import sun.misc.BASE64Encoder;

public class CommonUtil {

/**

* 校验出生日期是否合法

* @param date 格式:YYYYMMDD或者YYYY-MM-DD

* @return

*/

public static boolean checkBirthDay(String birthDay){

if(birthDay.indexOf("-") > 0){

birthDay = birthDay.replaceAll("-", "");

}

Pattern birthDatePattern= Pattern.compile("(\\d{4})(\\d{2})(\\d{2}).*");

Matcher birthDateMather= birthDatePattern.matcher(birthDay);

if(birthDateMather.find()){

String yearStr = birthDateMather.group(1);

int year = Integer.valueOf(yearStr);

//闰年标识

boolean isFlag = false;

if((year % 4 == 0 && year % 100 != 0) || year % 400 == 0){

isFlag = true;

}

String monthStr = birthDateMather.group(2);

int month = Integer.valueOf(monthStr);

if(month > 12 || month <= 0){

return false;

}

String dateStr = birthDateMather.group(3);

int date = Integer.valueOf(dateStr);

if(date <= 0){

return false;

}else{

if(month == 2){

if(isFlag){

if(date > 29){

return false;

}else{

return true;

}

}else{

if(date > 28){

return false;

}else{

return true;

}

}

}else{

if(monthStr.equals("1") || monthStr.equals("3") || monthStr.equals("5") || monthStr.equals("7")

|| monthStr.equals("8") || monthStr.equals("10") || monthStr.equals("12")){

if(date > 31){

return false;

}else{

return true;

}

}else{

if(date > 30){

return false;

}else{

return true;

}

}

}

}

}

return false;

}

/**

* 校验身份证格式

* @param str

* @return

*/

public static boolean checkCardNo(String cardNo){

Pattern idNumPattern = Pattern.compile("(\\d{14}[0-9a-zA-Z])|(\\d{17}[0-9a-zA-Z])");

//通过Pattern获得Matcher

Matcher idNumMatcher = idNumPattern.matcher(cardNo);

//判断用户输入是否为身份证号

if(idNumMatcher.matches()){

//如果是,定义正则表达式提取出身份证中的出生日期

Pattern birthDatePattern= Pattern.compile("\\d{6}(\\d{8}).*");

//通过Pattern获得Matcher

Matcher birthDateMather= birthDatePattern.matcher(cardNo);

//通过Matcher获得用户的出生年月日

if(birthDateMather.find()){

return checkBirthDay(birthDateMather.group(1));

}

}

return false;

}

/**

* 校验银行卡号是否合法:信用卡卡16位 普通卡18位

* 设置范围16-20位数字

* @param bankNo

* @return

*/

public static boolean checkBankNo(String bankNo){

if((bankNo.length() >= 16 && bankNo.length() <= 20) && StringUtils.isNumeric(bankNo)){

return true;

}

return false;

}

/**

* 校验会员账户是否合法:9开头数字

* @param id

* @return

*/

public static boolean checkMemberId(String id){

if(id.startsWith("9") && StringUtils.isNumeric(id)){

return true;

}

return false;

}

/**

* 校验手机号码是否合法

* 规则:13 14 15 18号段,17虚拟号段不在校验范围

* @param mobile

* @return

*/

public static boolean checkMobile(String mobile) {

Pattern p = Pattern.compile("^[1][3,4,5,7,8][0-9]{9}$");

Matcher m = p.matcher(mobile);

return m.matches();

}

/**

* 校验密码是否合法:包含弱密码校验(4个连续字符、顺序字符)

* @param pwd

* @return

*/

public static String checkPassword(String pwd){

if(pwd.length() < 6 || pwd.length() > 40){

return "密码长度为6到40位";

}

if(pwd.matches("[0-9]{1,}")){

return "密码不能全是数字";

}

if(pwd.matches("[a-zA-Z]{1,}")){

return "密码不能全是字母";

}

String[] strArr = {"0123","1234","2345","3456","4567","5678","6789","9876","8765","7654","6543","5432","4321","3210","0000","1111","2222","3333","4444","5555","6666","7777","8888","9999","abcd","bcde","cdef","defg","efgh","fghi","ghij","hijk","ijkl","jklm","klmn","lmno","mnop","nopq","opqr","pqrs","qrst","rstu","stuv","tuvw","uvwx","vwxy","wxyz","zyxw","yxwv","xwvu","wvut","vuts","utsr","tsrq","srqp","rqpo","qpon","ponm","onml","nmlk","mlkj","lkji","kjih","jihg","ihgf","hgfe","gfed","fedc","edcb","dcba","ABCD","BCDE","CDEF","DEFG","EFGH","FGHI","GHIJ","HIJK","IJKL","JKLM","KLMN","LMNO","MNOP","NOPQ","OPQR","PQRS","QRST","RSTU","STUV","TUVW","UVWX","VWXY","WXYZ","ZYXW","YXWV","XWVU","WVUT","VUTS","UTSR","TSRQ","SRQP","RQPO","QPON","PONM","ONML","NMLK","MLKJ","LKJI","KJIH","JIHG","IHGF","HGFE","GFED","FEDC","EDCB","DCBA","aaaa","bbbb","cccc","dddd","eeee","ffff","gggg","hhhh","iiii","jjjj","kkkk","llll","mmmm","nnnn","oooo","pppp","qqqq","rrrr","ssss","tttt","uuuu","vvvv","wwww","xxxx","yyyy","zzzz","AAAA","BBBB","CCCC","DDDD","EEEE","FFFF","GGGG","HHHH","IIII","JJJJ","KKKK","LLLL","MMMM","NNNN","OOOO","PPPP","QQQQ","RRRR","SSSS","TTTT","UUUU","VVVV","WWWW","XXXX","YYYY","ZZZZ"};

for(String str : strArr){

if(pwd.indexOf(str) >= 0){

return "密码不合法(不能包含连续数字或字符)";

}

}

return "";

}

/**

* 校验银行卡(信用卡)有效期

* 格式:09/14

* @param date

* @return

*/

public static String checkBankExpireDate(String date){

String result = "有效期格式错误";

if(date.indexOf("/") < 0){

return result;

}

String[] arr = date.split("/");

if(arr.length != 2){

return result;

}

//去掉空格

String month = arr[0].replaceAll("\\s*", "");

String year = arr[1].replaceAll("\\s*", "");

//校验是否是数字

if(!(StringUtils.isNumeric(month) && StringUtils.isNumeric(year))){

return result;

}

//校验月份是否超期

if(!(Integer.valueOf(month) >=1 && Integer.valueOf(month) <= 12)){

return result;

}

return "";

}

/**

* 方法名: checkPictureFormat

* 描述: 判断字符串中的url是否都是图片格式字符串 (支持的图片格式后缀:jpg|jpeg|png|bmp)

* @param imgUrl

* @return boolean

* 作者: linyuanq

* 创建时间: 2017年4月20日上午11:27:02

*/

public static boolean checkPictureFormat(String imgUrl){

if(StringUtils.isEmpty(imgUrl)){

return false;

}

String reg="(?i).+?\\.(jpg|jpeg|png|bmp)";

return imgUrl.matches(reg);

}

/**

* 方法名: getImageStr

* 描述: 通过图片url读取图片 并保存到其他位置

* @param _path 源图片位置

* @param _savePath 新保存到的位置

* 作者: linyuanq

* 创建时间: 2017年4月20日下午3:24:04

*/

public static void readImageByUrlAndWriteOther(String _path, String _savePath) {

String savePath = _savePath;

String path = _path;

int BYTE_SIZE = 1;

int SAVE_SIZE = 1024;

byte[] buff = new byte[BYTE_SIZE]; // 每次读的缓存

byte[] save = new byte[SAVE_SIZE]; // 保存前缓存

BufferedInputStream bf = null;

FileOutputStream file;

URL url = null;

String imgBase64 = "";

HttpURLConnection httpUrl;

try {

// 对字节数组Base64编码

BASE64Encoder encoder = new BASE64Encoder();

url = new URL(path);

httpUrl = (HttpURLConnection) url.openConnection();

bf = new BufferedInputStream(httpUrl.getInputStream());

file = new FileOutputStream(savePath);

int i = 0;

while (bf.read(buff) != -1) { // 一个字节一个字节读

save[i] = buff[0];

if (i == SAVE_SIZE - 1) { // 达到保存长度时开始保存

imgBase64 += encoder.encode(save);

file.write(save, 0, SAVE_SIZE);

save = new byte[SAVE_SIZE];

i = 0;

} else {

i++;

}

}

// 最后这段如果没达到保存长度,需要把前面的保存下来

if (i > 0) {

imgBase64 += encoder.encode(save);

file.write(save, 0, i - 1);

}

httpUrl.disconnect();

file.close();

} catch (MalformedURLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

} finally {

try {

bf.close();

} catch (Exception e) {

e.printStackTrace();

}

}

}

/**

* 方法名: getImgToBase64

* 描述: 通过图片url读取图片并将图片转换成base64编码

* @param _path

* @return tup

* 作者: linyuanq

* 创建时间: 2017年4月20日下午3:20:57

*/

public static String getImgToBase64(String _path) {

String path = _path;

int BYTE_SIZE = 1;

int SAVE_SIZE = 1024;

byte[] buff = new byte[BYTE_SIZE]; // 每次读的缓存

byte[] save = new byte[SAVE_SIZE]; // 保存前缓存

byte[] imgByte = null;

String imgStr = null;

BufferedInputStream bf = null;

URL url = null;

HttpURLConnection httpUrl;

List<byte[]> byteList = null;

try {

byteList = new ArrayList<byte[]>();

// 对字节数组Base64编码

BASE64Encoder encoder = new BASE64Encoder();

url = new URL(path);

httpUrl = (HttpURLConnection) url.openConnection();

bf = new BufferedInputStream(httpUrl.getInputStream());

int i = 0;

while (bf.read(buff) != -1) { // 一个字节一个字节读

save[i] = buff[0];

if (i == SAVE_SIZE - 1) { // 达到保存长度时开始保存

// 返回Base64编码过的字节数组字符串

byteList.add(save);

save = new byte[SAVE_SIZE];

i = 0;

} else {

i++;

}

}

// 最后这段如果没达到保存长度,需要把前面的保存下来

if (i > 0) {

// 返回Base64编码过的字节数组字符串

byteList.add(save);

}

int length = byteList.size();

imgByte = new byte[SAVE_SIZE * (length - 1) + i];

for (int j = 0; j < byteList.size() - 1; j++) {

byte[] temp = byteList.get(j);

System.arraycopy(temp, 0, imgByte, j * SAVE_SIZE, SAVE_SIZE);

}

if (i > 0) {

System.arraycopy(save, 0, imgByte, (length - 1) * SAVE_SIZE, i);

}

imgStr = encoder.encode(imgByte);

httpUrl.disconnect();

} catch (MalformedURLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} finally {

try {

bf.close();

} catch (Exception e) {

e.printStackTrace();

}

}

return imgStr;

}

/**

* 方法名: matchResult

* 描述: 根据正则表达式抽取相应字符串出来。比如抽取字符串的中文字符或者字母或者数字出来

* @param p

* @param str

* @return

* 作者: lin

* 创建时间: 2017年5月8日下午7:30:22

*/

public static String matchResult(Pattern p,String str)

{

StringBuilder sb = new StringBuilder();

Matcher m = p.matcher(str);

while (m.find())

for (int i = 0; i <= m.groupCount(); i++)

{

sb.append(m.group());

}

return sb.toString();

}

}package com.jst.park.util;

import java.io.BufferedInputStream;

import java.io.FileOutputStream;

import java.io.IOException;

import java.net.HttpURLConnection;

import java.net.MalformedURLException;

import java.net.URL;

import java.util.ArrayList;

import java.util.List;

import java.util.regex.Matcher;

import java.util.regex.Pattern;

import org.apache.commons.lang.StringUtils;

import sun.misc.BASE64Encoder;

public class CommonUtil {

/**

* 校验出生日期是否合法

* @param date 格式:YYYYMMDD或者YYYY-MM-DD

* @return

*/

public static boolean checkBirthDay(String birthDay){

if(birthDay.indexOf("-") > 0){

birthDay = birthDay.replaceAll("-", "");

}

Pattern birthDatePattern= Pattern.compile("(\\d{4})(\\d{2})(\\d{2}).*");

Matcher birthDateMather= birthDatePattern.matcher(birthDay);

if(birthDateMather.find()){

String yearStr = birthDateMather.group(1);

int year = Integer.valueOf(yearStr);

//闰年标识

boolean isFlag = false;

if((year % 4 == 0 && year % 100 != 0) || year % 400 == 0){

isFlag = true;

}

String monthStr = birthDateMather.group(2);

int month = Integer.valueOf(monthStr);

if(month > 12 || month <= 0){

return false;

}

String dateStr = birthDateMather.group(3);

int date = Integer.valueOf(dateStr);

if(date <= 0){

return false;

}else{

if(month == 2){

if(isFlag){

if(date > 29){

return false;

}else{

return true;

}

}else{

if(date > 28){

return false;

}else{

return true;

}

}

}else{

if(monthStr.equals("1") || monthStr.equals("3") || monthStr.equals("5") || monthStr.equals("7")

|| monthStr.equals("8") || monthStr.equals("10") || monthStr.equals("12")){

if(date > 31){

return false;

}else{

return true;

}

}else{

if(date > 30){

return false;

}else{

return true;

}

}

}

}

}

return false;

}

/**

* 校验身份证格式

* @param str

* @return

*/

public static boolean checkCardNo(String cardNo){

Pattern idNumPattern = Pattern.compile("(\\d{14}[0-9a-zA-Z])|(\\d{17}[0-9a-zA-Z])");

//通过Pattern获得Matcher

Matcher idNumMatcher = idNumPattern.matcher(cardNo);

//判断用户输入是否为身份证号

if(idNumMatcher.matches()){

//如果是,定义正则表达式提取出身份证中的出生日期

Pattern birthDatePattern= Pattern.compile("\\d{6}(\\d{8}).*");

//通过Pattern获得Matcher

Matcher birthDateMather= birthDatePattern.matcher(cardNo);

//通过Matcher获得用户的出生年月日

if(birthDateMather.find()){

return checkBirthDay(birthDateMather.group(1));

}

}

return false;

}

/**

* 校验银行卡号是否合法:信用卡卡16位 普通卡18位

* 设置范围16-20位数字

* @param bankNo

* @return

*/

public static boolean checkBankNo(String bankNo){

if((bankNo.length() >= 16 && bankNo.length() <= 20) && StringUtils.isNumeric(bankNo)){

return true;

}

return false;

}

/**

* 校验会员账户是否合法:9开头数字

* @param id

* @return

*/

public static boolean checkMemberId(String id){

if(id.startsWith("9") && StringUtils.isNumeric(id)){

return true;

}

return false;

}

/**

* 校验手机号码是否合法

* 规则:13 14 15 18号段,17虚拟号段不在校验范围

* @param mobile

* @return

*/

public static boolean checkMobile(String mobile) {

Pattern p = Pattern.compile("^[1][3,4,5,7,8][0-9]{9}$");

Matcher m = p.matcher(mobile);

return m.matches();

}

/**

* 校验密码是否合法:包含弱密码校验(4个连续字符、顺序字符)

* @param pwd

* @return

*/

public static String checkPassword(String pwd){

if(pwd.length() < 6 || pwd.length() > 40){

return "密码长度为6到40位";

}

if(pwd.matches("[0-9]{1,}")){

return "密码不能全是数字";

}

if(pwd.matches("[a-zA-Z]{1,}")){

return "密码不能全是字母";

}

String[] strArr = {"0123","1234","2345","3456","4567","5678","6789","9876","8765","7654","6543","5432","4321","3210","0000","1111","2222","3333","4444","5555","6666","7777","8888","9999","abcd","bcde","cdef","defg","efgh","fghi","ghij","hijk","ijkl","jklm","klmn","lmno","mnop","nopq","opqr","pqrs","qrst","rstu","stuv","tuvw","uvwx","vwxy","wxyz","zyxw","yxwv","xwvu","wvut","vuts","utsr","tsrq","srqp","rqpo","qpon","ponm","onml","nmlk","mlkj","lkji","kjih","jihg","ihgf","hgfe","gfed","fedc","edcb","dcba","ABCD","BCDE","CDEF","DEFG","EFGH","FGHI","GHIJ","HIJK","IJKL","JKLM","KLMN","LMNO","MNOP","NOPQ","OPQR","PQRS","QRST","RSTU","STUV","TUVW","UVWX","VWXY","WXYZ","ZYXW","YXWV","XWVU","WVUT","VUTS","UTSR","TSRQ","SRQP","RQPO","QPON","PONM","ONML","NMLK","MLKJ","LKJI","KJIH","JIHG","IHGF","HGFE","GFED","FEDC","EDCB","DCBA","aaaa","bbbb","cccc","dddd","eeee","ffff","gggg","hhhh","iiii","jjjj","kkkk","llll","mmmm","nnnn","oooo","pppp","qqqq","rrrr","ssss","tttt","uuuu","vvvv","wwww","xxxx","yyyy","zzzz","AAAA","BBBB","CCCC","DDDD","EEEE","FFFF","GGGG","HHHH","IIII","JJJJ","KKKK","LLLL","MMMM","NNNN","OOOO","PPPP","QQQQ","RRRR","SSSS","TTTT","UUUU","VVVV","WWWW","XXXX","YYYY","ZZZZ"};

for(String str : strArr){

if(pwd.indexOf(str) >= 0){

return "密码不合法(不能包含连续数字或字符)";

}

}

return "";

}

/**

* 校验银行卡(信用卡)有效期

* 格式:09/14

* @param date

* @return

*/

public static String checkBankExpireDate(String date){

String result = "有效期格式错误";

if(date.indexOf("/") < 0){

return result;

}

String[] arr = date.split("/");

if(arr.length != 2){

return result;

}

//去掉空格

String month = arr[0].replaceAll("\\s*", "");

String year = arr[1].replaceAll("\\s*", "");

//校验是否是数字

if(!(StringUtils.isNumeric(month) && StringUtils.isNumeric(year))){

return result;

}

//校验月份是否超期

if(!(Integer.valueOf(month) >=1 && Integer.valueOf(month) <= 12)){

return result;

}

return "";

}

/**

* 方法名: checkPictureFormat

* 描述: 判断字符串中的url是否都是图片格式字符串 (支持的图片格式后缀:jpg|jpeg|png|bmp)

* @param imgUrl

* @return boolean

* 作者: linyuanq

* 创建时间: 2017年4月20日上午11:27:02

*/

public static boolean checkPictureFormat(String imgUrl){

if(StringUtils.isEmpty(imgUrl)){

return false;

}

String reg="(?i).+?\\.(jpg|jpeg|png|bmp)";

return imgUrl.matches(reg);

}

/**

* 方法名: getImageStr

* 描述: 通过图片url读取图片 并保存到其他位置

* @param _path 源图片位置

* @param _savePath 新保存到的位置

* 作者: linyuanq

* 创建时间: 2017年4月20日下午3:24:04

*/

public static void readImageByUrlAndWriteOther(String _path, String _savePath) {

String savePath = _savePath;

String path = _path;

int BYTE_SIZE = 1;

int SAVE_SIZE = 1024;

byte[] buff = new byte[BYTE_SIZE]; // 每次读的缓存

byte[] save = new byte[SAVE_SIZE]; // 保存前缓存

BufferedInputStream bf = null;

FileOutputStream file;

URL url = null;

String imgBase64 = "";

HttpURLConnection httpUrl;

try {

// 对字节数组Base64编码

BASE64Encoder encoder = new BASE64Encoder();

url = new URL(path);

httpUrl = (HttpURLConnection) url.openConnection();

bf = new BufferedInputStream(httpUrl.getInputStream());

file = new FileOutputStream(savePath);

int i = 0;

while (bf.read(buff) != -1) { // 一个字节一个字节读

save[i] = buff[0];

if (i == SAVE_SIZE - 1) { // 达到保存长度时开始保存

imgBase64 += encoder.encode(save);

file.write(save, 0, SAVE_SIZE);

save = new byte[SAVE_SIZE];

i = 0;

} else {

i++;

}

}

// 最后这段如果没达到保存长度,需要把前面的保存下来

if (i > 0) {

imgBase64 += encoder.encode(save);

file.write(save, 0, i - 1);

}

httpUrl.disconnect();

file.close();

} catch (MalformedURLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

} finally {

try {

bf.close();

} catch (Exception e) {

e.printStackTrace();

}

}

}

/**

* 方法名: getImgToBase64

* 描述: 通过图片url读取图片并将图片转换成base64编码

* @param _path

* @return tup

* 作者: linyuanq

* 创建时间: 2017年4月20日下午3:20:57

*/

public static String getImgToBase64(String _path) {

String path = _path;

int BYTE_SIZE = 1;

int SAVE_SIZE = 1024;

byte[] buff = new byte[BYTE_SIZE]; // 每次读的缓存

byte[] save = new byte[SAVE_SIZE]; // 保存前缓存

byte[] imgByte = null;

String imgStr = null;

InputStream bf = null;

//BufferedInputStream bf = null;

//URL url = null;

//HttpURLConnection httpUrl;

List<byte[]> byteList = null;

try {

byteList = new ArrayList<byte[]>();

// 对字节数组Base64编码

BASE64Encoder encoder = new BASE64Encoder();

/*

url = new URL(path);

httpUrl = (HttpURLConnection) url.openConnection();

bf = new BufferedInputStream(httpUrl.getInputStream());

*/

HttpClient client = new DefaultHttpClient();

HttpGet request = new HttpGet(path);

HttpResponse response = client.execute(request);

bf = response.getEntity().getContent();

int i = 0;

while (bf.read(buff) != -1) { // 一个字节一个字节读

save[i] = buff[0];

if (i == SAVE_SIZE - 1) { // 达到保存长度时开始保存

// 返回Base64编码过的字节数组字符串

byteList.add(save);

save = new byte[SAVE_SIZE];

i = 0;

} else {

i++;

}

}

// 最后这段如果没达到保存长度,需要把前面的保存下来

if (i > 0) {

// 返回Base64编码过的字节数组字符串

byteList.add(save);

}

int length = byteList.size();

imgByte = new byte[SAVE_SIZE * (length - 1) + i];

for (int j = 0; j < byteList.size() - 1; j++) {

byte[] temp = byteList.get(j);

System.arraycopy(temp, 0, imgByte, j * SAVE_SIZE, SAVE_SIZE);

}

if (i > 0) {

System.arraycopy(save, 0, imgByte, (length - 1) * SAVE_SIZE, i);

}

imgStr = encoder.encode(imgByte);

//httpUrl.disconnect();

} catch (MalformedURLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} finally {

try {

bf.close();

} catch (Exception e) {

e.printStackTrace();

}

}

return imgStr;

}

/**

* 方法名: matchResult

* 描述: 根据正则表达式抽取相应字符串出来。比如抽取字符串的中文字符或者字母或者数字出来

* @param p

* @param str

* @return

* 作者: lin

* 创建时间: 2017年5月8日下午7:30:22

*/

public static String matchResult(Pattern p,String str)

{

StringBuilder sb = new StringBuilder();

Matcher m = p.matcher(str);

while (m.find())

for (int i = 0; i <= m.groupCount(); i++)

{

sb.append(m.group());

}

return sb.toString();

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐