正则表达式——转载
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為我新加入功能,即返回身份證的地區(qū),返回性別,返回出生日期(前提身份證為正確的)
//該作者寫得非常好,而且通俗易懂,值得好好學習
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、地址碼(前六位數)
??????? 表示編碼對象常住戶口所在縣(市、旗、區(qū))的行政區(qū)劃代碼,按GB/T2260的規(guī)定執(zhí)行。
??????? 3、出生日期碼(第七位至十四位)
??????? 表示編碼對象出生的年、月、日,按GB/T7408的規(guī)定執(zhí)行,年、月、日代碼之間不用分隔符。
??????? 4、順序碼(第十五位至十七位)
??????? 表示在同一地址碼所標識的區(qū)域范圍內,對同年、同月、同日出生的人編定的順序號,順序碼的奇數分配給男性,偶數分配給女性。
??????? 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)=====================
??
??
??????? //================ 地區(qū)碼時候有效 ================
??????? Hashtable h=GetAreaCode();
??????? if(h.get(Ai.substring(0,2))==null)
??????? ...{
???????? errorInfo="地區(qū)編碼錯誤。";
???????? 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("所在地區(qū):"+h.get(Ai.substring(0,2).toString()));
???????? System.out.println("新身份證號:"+Ai);
???????? return true;
??????? }
??????? //=====================(end)=====================
??????? System.out.println("所在地區(qū):"+h.get(Ai.substring(0,2).toString()));
??????? return true;
}
/** *//**======================================================================
??????? * 功能:設置地區(qū)編碼
??????? * @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;
??????? }
}
/**//*=======================================================================
??????? *功能:在判定已經是正確的身份證號碼之后,查找出身份證所在地區(qū)
??????? idCard 身份證號碼
??????? 所在地區(qū)
??????? */
public String GetArea(String idCard)...{
??? Hashtable<String,String> ht = GetAreaCode();
??? String area = ht.get(idCard.substring(0,2));
??? return area;
}
/**//*=======================================================================
??????? *功能:在判定已經是正確的身份證號碼之后,查找出此人性別
??????? idCard 身份證號碼
??????? 男或者女
??????? */
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 "男";
}
/**//*=======================================================================
??????? *功能:在判定已經是正確的身份證號碼之后,查找出此人出生日期
??????? idCard 身份證號碼
??????? 出生日期 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"));
}
}
本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/inkstone2006/archive/2008/01/18/2051507.aspx
?
轉載于:https://www.cnblogs.com/zhangnaitao/p/5923072.html
總結
- 上一篇: LVS+keepalived构建PXC高
- 下一篇: ckeditor_4.5.10_full