Java判斷時間,Email,手機號是否爲正確格式
//=====================判斷時間是否正確格式
public static boolean checkDate(String date,String format) ...{
DateFormat df = new SimpleDateFormat(format);
Date d = null;
try...{
d = df.parse(date);
}catch(Exception e)...{
//如果不能轉換,肯定是錯誤格式
return false;
}
String s1 = df.format(d);
// 轉換後的日期再轉換回String,如果不等,邏輯錯誤.如format爲"yyyy-MM-dd",date爲
// "2006-02-31",轉換爲日期後再轉換回字符串爲"2006-03-03",說明格式雖然對,但日期
// 邏輯上不對.
return date.equals(s1);
}
//=====================判斷時間是否正確格式
//=====================判斷郵件email是否正確格式
public boolean checkEmail(String email)...{
Pattern pattern = Pattern.compile("^/w+([-.]/w+)*@/w+([-]/w+)*/.(/w+([-]/w+)*/.)*[a-z]{2,3}$");
Matcher matcher = pattern.matcher(email);
if (matcher.matches()) ...{
return true;
}
return false;
}
//=====================判斷郵件email是否正確格式
//=====================判斷手機號phone是否正確格式
public boolean checkPhone(String phone)...{
Pattern pattern = Pattern.compile("^13/d{9}||15[8,9]/d{8}$");
Matcher matcher = pattern.matcher(phone);
if (matcher.matches()) ...{
return true;
}
return false;
}
//=====================判斷手機號phone是否正確格式
//==============以下爲轉載其他人的.
//其中GetArea,GetSex,GetBirthday爲我新加入功能,即返回身份證的地區,返回性別,返回出生日期(前提身份證爲正確的)
//該作者寫得非常好,而且通俗易懂,值得好好學習
package com.validate.idcard;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.GregorianCalendar;
import java.util.Hashtable;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.Calendar;
public class IDCard ...{
/** *//**
* 1、號碼的結構
公民身份號碼是特徵組合碼,由十七位數字本體碼和一位校驗碼組成。排列順序從左至右依次爲:六位數字地址碼,八位數字出生日期碼,三位數字順序碼和一位數字校驗碼。
2、地址碼(前六位數)
表示編碼對象常住戶口所在縣(市、旗、區)的行政區劃代碼,按GB/T2260的規定執行。
3、出生日期碼(第七位至十四位)
表示編碼對象出生的年、月、日,按GB/T7408的規定執行,年、月、日代碼之間不用分隔符。
4、順序碼(第十五位至十七位)
表示在同一地址碼所標識的區域範圍內,對同年、同月、同日出生的人編定的順序號,順序碼的奇數分配給男性,偶數分配給女性。
5、校驗碼(第十八位數)
(1)十七位數字本體碼加權求和公式
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
(2)計算模
Y = mod(S, 11)
(3)通過模得到對應的校驗碼
Y: 0 1 2 3 4 5 6 7 8 9 10
校驗碼: 1 0 X 9 8 7 6 5 4 3 2
所以我們就可以大致寫一個函數來校驗是否正確了。
* */
/** *//**======================================================================
* 功能:身份證的有效驗證
* @param IDStr 身份證號
* @return 有效:true 無效:false
* @throws ParseException
*/
public boolean IDCardValidate(String IDStr) throws ParseException
...{
String errorInfo = "";//記錄錯誤信息
String[] ValCodeArr = ...{"1","0","x","9","8","7","6","5","4","3","2"};
String[] Wi = ...{"7","9","10","5","8","4","2","1","6","3","7","9","10","5","8","4","2"};
//String[] Checker = {"1","9","8","7","6","5","4","3","2","1","1"};
String Ai="";
//================ 號碼的長度 15位或18位 ================
if(IDStr.length()!=15 && IDStr.length()!=18)
...{
errorInfo="號碼長度應該爲15位或18位。";
System.out.println(errorInfo);
return false;
}
//=======================(end)========================
//================ 數字 除最後以爲都爲數字 ================
if(IDStr.length()==18)
...{
Ai=IDStr.substring(0,17);
}
else if(IDStr.length()==15)
...{
Ai=IDStr.substring(0,6)+"19"+IDStr.substring(6,15);
}
if(isNumeric(Ai)==false)
...{
errorInfo="15位號碼都應爲數字 ; 18位號碼除最後一位外,都應爲數字。";
System.out.println(errorInfo);
return false;
}
//=======================(end)========================
//================ 出生年月是否有效 ================
String strYear =Ai.substring(6 ,10);//年份
String strMonth=Ai.substring(10,12);//月份
String strDay =Ai.substring(12,14);//月份
if(this.isDate(strYear+"-"+strMonth+"-"+strDay)==false)
...{
errorInfo="生日無效。";
System.out.println(errorInfo);
return false;
}
GregorianCalendar gc=new GregorianCalendar();
SimpleDateFormat s=new SimpleDateFormat("yyyy-MM-dd");
if((gc.get(Calendar.YEAR)-Integer.parseInt(strYear))>150 || (gc.getTime().getTime()-s.parse(strYear+"-"+strMonth+"-"+strDay).getTime())<0)
...{
errorInfo="生日不在有效範圍。";
System.out.println(errorInfo);
return false;
}
if(Integer.parseInt(strMonth)>12 || Integer.parseInt(strMonth)==0)
...{
errorInfo="月份無效";
System.out.println(errorInfo);
return false;
}
if(Integer.parseInt(strDay)>31 || Integer.parseInt(strDay)==0)
...{
errorInfo="日期無效";
System.out.println(errorInfo);
return false;
}
//=====================(end)=====================
//================ 地區碼時候有效 ================
Hashtable h=GetAreaCode();
if(h.get(Ai.substring(0,2))==null)
...{
errorInfo="地區編碼錯誤。";
System.out.println(errorInfo);
return false;
}
//==============================================
//================ 判斷最後一位的值 ================
int TotalmulAiWi=0;
for(int i=0 ; i<17 ; i++)
...{
TotalmulAiWi = TotalmulAiWi + Integer.parseInt(String.valueOf(Ai.charAt(i))) * Integer.parseInt(Wi[i]);
}
int modValue=TotalmulAiWi % 11;
String strVerifyCode=ValCodeArr[modValue];
Ai=Ai+strVerifyCode;
if(IDStr.length()==18)
...{
if(Ai.equals(IDStr)==false)
...{
errorInfo="身份證無效,最後一位字母錯誤";
System.out.println(errorInfo);
return false;
}
}
else
...{
System.out.println("所在地區:"+h.get(Ai.substring(0,2).toString()));
System.out.println("新身份證號:"+Ai);
return true;
}
//=====================(end)=====================
System.out.println("所在地區:"+h.get(Ai.substring(0,2).toString()));
return true;
}
/** *//**======================================================================
* 功能:設置地區編碼
* @return Hashtable 對象
*/
private Hashtable GetAreaCode()
...{
Hashtable hashtable=new Hashtable();
hashtable.put("11","北京");
hashtable.put("12","天津");
hashtable.put("13","河北");
hashtable.put("14","山西");
hashtable.put("15","內蒙古");
hashtable.put("21","遼寧");
hashtable.put("22","吉林");
hashtable.put("23","黑龍江");
hashtable.put("31","上海");
hashtable.put("32","江蘇");
hashtable.put("33","浙江");
hashtable.put("34","安徽");
hashtable.put("35","福建");
hashtable.put("36","江西");
hashtable.put("37","山東");
hashtable.put("41","河南");
hashtable.put("42","湖北");
hashtable.put("43","湖南");
hashtable.put("44","廣東");
hashtable.put("45","廣西");
hashtable.put("46","海南");
hashtable.put("50","重慶");
hashtable.put("51","四川");
hashtable.put("52","貴州");
hashtable.put("53","雲南");
hashtable.put("54","西藏");
hashtable.put("61","陝西");
hashtable.put("62","甘肅");
hashtable.put("63","青海");
hashtable.put("64","寧夏");
hashtable.put("65","新疆");
hashtable.put("71","臺灣");
hashtable.put("81","香港");
hashtable.put("82","澳門");
hashtable.put("91","國外");
return hashtable;
}
/** *//**======================================================================
* 功能:判斷字符串是否爲數字
* @param str
* @return
*/
private boolean isNumeric(String str)
...{
Pattern pattern=Pattern.compile("[0-9]*");
Matcher isNum=pattern.matcher(str);
if(isNum.matches())
...{
return true;
}
else
...{
return false;
}
/**//*判斷一個字符時候爲數字
if(Character.isDigit(str.charAt(0)))
{
return true;
}
else
{
return false;
}*/
}
/** *//**======================================================================
* 功能:判斷字符串是否爲日期格式
* @param str
* @return
*/
public boolean isDate(String strDate)
...{
Pattern pattern = Pattern.compile("^((/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]))))))(/s(((0?[0-9])|([1-2][0-3]))/:([0-5]?[0-9])((/s)|(/:([0-5]?[0-9])))))?$");
Matcher m=pattern.matcher(strDate);
if(m.matches())
...{
return true;
}
else
...{
return false;
}
}
/**//*=======================================================================
*功能:在判定已經是正確的身份證號碼之後,查找出身份證所在地區
*@param idCard 身份證號碼
*@return 所在地區
*/
public String GetArea(String idCard)...{
Hashtable<String,String> ht = GetAreaCode();
String area = ht.get(idCard.substring(0,2));
return area;
}
/**//*=======================================================================
*功能:在判定已經是正確的身份證號碼之後,查找出此人性別
*@param idCard 身份證號碼
*@return 男或者女
*/
public String GetSex(String idCard)...{
String sex = "";
if(idCard.length()==15)
sex = idCard.substring(idCard.length()-3,idCard.length());
if(idCard.length()==18)
sex = idCard.substring(idCard.length()-4,idCard.length()-1);
System.out.println(sex);
int sexNum = Integer.parseInt(sex)%2;
if(sexNum == 0)...{
return "女";
}
return "男";
}
/**//*=======================================================================
*功能:在判定已經是正確的身份證號碼之後,查找出此人出生日期
*@param idCard 身份證號碼
*@return 出生日期 XXXX MM-DD
*/
public String GetBirthday(String idCard)...{
String Ain = "";
if(idCard.length()==18) ...{
Ain=idCard.substring(0,17);
} else if(idCard.length()==15) ...{
Ain=idCard.substring(0,6)+"19"+idCard.substring(6,15);
}
//================ 出生年月是否有效 ================
String strYear =Ain.substring(6 ,10);//年份
String strMonth=Ain.substring(10,12);//月份
String strDay =Ain.substring(12,14);//日期
return strYear+"-"+strMonth+"-"+strDay;
}
/** *//**
* @param args
* @throws ParseException
*/
public static void main(String[] args) throws ParseException ...{
//String IDCardNum="210102820826411";
//String IDCardNum="210102198208264114";
String IDCardNum="210103970228123";
IDCard cc=new IDCard();
System.out.println(cc.IDCardValidate(IDCardNum));
//System.out.println(cc.isDate("1996-02-29"));
}
}
public static boolean checkDate(String date,String format) ...{
DateFormat df = new SimpleDateFormat(format);
Date d = null;
try...{
d = df.parse(date);
}catch(Exception e)...{
//如果不能轉換,肯定是錯誤格式
return false;
}
String s1 = df.format(d);
// 轉換後的日期再轉換回String,如果不等,邏輯錯誤.如format爲"yyyy-MM-dd",date爲
// "2006-02-31",轉換爲日期後再轉換回字符串爲"2006-03-03",說明格式雖然對,但日期
// 邏輯上不對.
return date.equals(s1);
}
//=====================判斷時間是否正確格式
//=====================判斷郵件email是否正確格式
public boolean checkEmail(String email)...{
Pattern pattern = Pattern.compile("^/w+([-.]/w+)*@/w+([-]/w+)*/.(/w+([-]/w+)*/.)*[a-z]{2,3}$");
Matcher matcher = pattern.matcher(email);
if (matcher.matches()) ...{
return true;
}
return false;
}
//=====================判斷郵件email是否正確格式
//=====================判斷手機號phone是否正確格式
public boolean checkPhone(String phone)...{
Pattern pattern = Pattern.compile("^13/d{9}||15[8,9]/d{8}$");
Matcher matcher = pattern.matcher(phone);
if (matcher.matches()) ...{
return true;
}
return false;
}
//=====================判斷手機號phone是否正確格式
//==============以下爲轉載其他人的.
//其中GetArea,GetSex,GetBirthday爲我新加入功能,即返回身份證的地區,返回性別,返回出生日期(前提身份證爲正確的)
//該作者寫得非常好,而且通俗易懂,值得好好學習
package com.validate.idcard;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.GregorianCalendar;
import java.util.Hashtable;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.Calendar;
public class IDCard ...{
/** *//**
* 1、號碼的結構
公民身份號碼是特徵組合碼,由十七位數字本體碼和一位校驗碼組成。排列順序從左至右依次爲:六位數字地址碼,八位數字出生日期碼,三位數字順序碼和一位數字校驗碼。
2、地址碼(前六位數)
表示編碼對象常住戶口所在縣(市、旗、區)的行政區劃代碼,按GB/T2260的規定執行。
3、出生日期碼(第七位至十四位)
表示編碼對象出生的年、月、日,按GB/T7408的規定執行,年、月、日代碼之間不用分隔符。
4、順序碼(第十五位至十七位)
表示在同一地址碼所標識的區域範圍內,對同年、同月、同日出生的人編定的順序號,順序碼的奇數分配給男性,偶數分配給女性。
5、校驗碼(第十八位數)
(1)十七位數字本體碼加權求和公式
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
(2)計算模
Y = mod(S, 11)
(3)通過模得到對應的校驗碼
Y: 0 1 2 3 4 5 6 7 8 9 10
校驗碼: 1 0 X 9 8 7 6 5 4 3 2
所以我們就可以大致寫一個函數來校驗是否正確了。
* */
/** *//**======================================================================
* 功能:身份證的有效驗證
* @param IDStr 身份證號
* @return 有效:true 無效:false
* @throws ParseException
*/
public boolean IDCardValidate(String IDStr) throws ParseException
...{
String errorInfo = "";//記錄錯誤信息
String[] ValCodeArr = ...{"1","0","x","9","8","7","6","5","4","3","2"};
String[] Wi = ...{"7","9","10","5","8","4","2","1","6","3","7","9","10","5","8","4","2"};
//String[] Checker = {"1","9","8","7","6","5","4","3","2","1","1"};
String Ai="";
//================ 號碼的長度 15位或18位 ================
if(IDStr.length()!=15 && IDStr.length()!=18)
...{
errorInfo="號碼長度應該爲15位或18位。";
System.out.println(errorInfo);
return false;
}
//=======================(end)========================
//================ 數字 除最後以爲都爲數字 ================
if(IDStr.length()==18)
...{
Ai=IDStr.substring(0,17);
}
else if(IDStr.length()==15)
...{
Ai=IDStr.substring(0,6)+"19"+IDStr.substring(6,15);
}
if(isNumeric(Ai)==false)
...{
errorInfo="15位號碼都應爲數字 ; 18位號碼除最後一位外,都應爲數字。";
System.out.println(errorInfo);
return false;
}
//=======================(end)========================
//================ 出生年月是否有效 ================
String strYear =Ai.substring(6 ,10);//年份
String strMonth=Ai.substring(10,12);//月份
String strDay =Ai.substring(12,14);//月份
if(this.isDate(strYear+"-"+strMonth+"-"+strDay)==false)
...{
errorInfo="生日無效。";
System.out.println(errorInfo);
return false;
}
GregorianCalendar gc=new GregorianCalendar();
SimpleDateFormat s=new SimpleDateFormat("yyyy-MM-dd");
if((gc.get(Calendar.YEAR)-Integer.parseInt(strYear))>150 || (gc.getTime().getTime()-s.parse(strYear+"-"+strMonth+"-"+strDay).getTime())<0)
...{
errorInfo="生日不在有效範圍。";
System.out.println(errorInfo);
return false;
}
if(Integer.parseInt(strMonth)>12 || Integer.parseInt(strMonth)==0)
...{
errorInfo="月份無效";
System.out.println(errorInfo);
return false;
}
if(Integer.parseInt(strDay)>31 || Integer.parseInt(strDay)==0)
...{
errorInfo="日期無效";
System.out.println(errorInfo);
return false;
}
//=====================(end)=====================
//================ 地區碼時候有效 ================
Hashtable h=GetAreaCode();
if(h.get(Ai.substring(0,2))==null)
...{
errorInfo="地區編碼錯誤。";
System.out.println(errorInfo);
return false;
}
//==============================================
//================ 判斷最後一位的值 ================
int TotalmulAiWi=0;
for(int i=0 ; i<17 ; i++)
...{
TotalmulAiWi = TotalmulAiWi + Integer.parseInt(String.valueOf(Ai.charAt(i))) * Integer.parseInt(Wi[i]);
}
int modValue=TotalmulAiWi % 11;
String strVerifyCode=ValCodeArr[modValue];
Ai=Ai+strVerifyCode;
if(IDStr.length()==18)
...{
if(Ai.equals(IDStr)==false)
...{
errorInfo="身份證無效,最後一位字母錯誤";
System.out.println(errorInfo);
return false;
}
}
else
...{
System.out.println("所在地區:"+h.get(Ai.substring(0,2).toString()));
System.out.println("新身份證號:"+Ai);
return true;
}
//=====================(end)=====================
System.out.println("所在地區:"+h.get(Ai.substring(0,2).toString()));
return true;
}
/** *//**======================================================================
* 功能:設置地區編碼
* @return Hashtable 對象
*/
private Hashtable GetAreaCode()
...{
Hashtable hashtable=new Hashtable();
hashtable.put("11","北京");
hashtable.put("12","天津");
hashtable.put("13","河北");
hashtable.put("14","山西");
hashtable.put("15","內蒙古");
hashtable.put("21","遼寧");
hashtable.put("22","吉林");
hashtable.put("23","黑龍江");
hashtable.put("31","上海");
hashtable.put("32","江蘇");
hashtable.put("33","浙江");
hashtable.put("34","安徽");
hashtable.put("35","福建");
hashtable.put("36","江西");
hashtable.put("37","山東");
hashtable.put("41","河南");
hashtable.put("42","湖北");
hashtable.put("43","湖南");
hashtable.put("44","廣東");
hashtable.put("45","廣西");
hashtable.put("46","海南");
hashtable.put("50","重慶");
hashtable.put("51","四川");
hashtable.put("52","貴州");
hashtable.put("53","雲南");
hashtable.put("54","西藏");
hashtable.put("61","陝西");
hashtable.put("62","甘肅");
hashtable.put("63","青海");
hashtable.put("64","寧夏");
hashtable.put("65","新疆");
hashtable.put("71","臺灣");
hashtable.put("81","香港");
hashtable.put("82","澳門");
hashtable.put("91","國外");
return hashtable;
}
/** *//**======================================================================
* 功能:判斷字符串是否爲數字
* @param str
* @return
*/
private boolean isNumeric(String str)
...{
Pattern pattern=Pattern.compile("[0-9]*");
Matcher isNum=pattern.matcher(str);
if(isNum.matches())
...{
return true;
}
else
...{
return false;
}
/**//*判斷一個字符時候爲數字
if(Character.isDigit(str.charAt(0)))
{
return true;
}
else
{
return false;
}*/
}
/** *//**======================================================================
* 功能:判斷字符串是否爲日期格式
* @param str
* @return
*/
public boolean isDate(String strDate)
...{
Pattern pattern = Pattern.compile("^((/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]))))))(/s(((0?[0-9])|([1-2][0-3]))/:([0-5]?[0-9])((/s)|(/:([0-5]?[0-9])))))?$");
Matcher m=pattern.matcher(strDate);
if(m.matches())
...{
return true;
}
else
...{
return false;
}
}
/**//*=======================================================================
*功能:在判定已經是正確的身份證號碼之後,查找出身份證所在地區
*@param idCard 身份證號碼
*@return 所在地區
*/
public String GetArea(String idCard)...{
Hashtable<String,String> ht = GetAreaCode();
String area = ht.get(idCard.substring(0,2));
return area;
}
/**//*=======================================================================
*功能:在判定已經是正確的身份證號碼之後,查找出此人性別
*@param idCard 身份證號碼
*@return 男或者女
*/
public String GetSex(String idCard)...{
String sex = "";
if(idCard.length()==15)
sex = idCard.substring(idCard.length()-3,idCard.length());
if(idCard.length()==18)
sex = idCard.substring(idCard.length()-4,idCard.length()-1);
System.out.println(sex);
int sexNum = Integer.parseInt(sex)%2;
if(sexNum == 0)...{
return "女";
}
return "男";
}
/**//*=======================================================================
*功能:在判定已經是正確的身份證號碼之後,查找出此人出生日期
*@param idCard 身份證號碼
*@return 出生日期 XXXX MM-DD
*/
public String GetBirthday(String idCard)...{
String Ain = "";
if(idCard.length()==18) ...{
Ain=idCard.substring(0,17);
} else if(idCard.length()==15) ...{
Ain=idCard.substring(0,6)+"19"+idCard.substring(6,15);
}
//================ 出生年月是否有效 ================
String strYear =Ain.substring(6 ,10);//年份
String strMonth=Ain.substring(10,12);//月份
String strDay =Ain.substring(12,14);//日期
return strYear+"-"+strMonth+"-"+strDay;
}
/** *//**
* @param args
* @throws ParseException
*/
public static void main(String[] args) throws ParseException ...{
//String IDCardNum="210102820826411";
//String IDCardNum="210102198208264114";
String IDCardNum="210103970228123";
IDCard cc=new IDCard();
System.out.println(cc.IDCardValidate(IDCardNum));
//System.out.println(cc.isDate("1996-02-29"));
}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.