public
class
util
is empty"
, idcard)
;return
false;}
int cardlength = idcard.
length()
;// 不為15或18位直接返回false
if(cardlength !=
15&& cardlength !=18)
should be 15 or 18 digits"
, idcard)
;return
false;}
string card =
cardlength ==
18? idcard.
substring(0
,17): idcard.
substring(0
,6)+
19+ idcard.
substring(6
,15);
// 對於15位身份證應該全是數字,對於18位身份證前17位應該全是數字if(
!isnumber
(card)
)// 出生年份
string year = card.
substring(6
,10);
// 出生月份
string month = card.
substring(10
,12);
// 出生日期
string day = card.
substring(12
,14);
// 判斷身份證日期是否合法if(
!isdate
(year +
"-"+ month +
"-"+ day)
)// 判斷身份證日期是否在有效範圍內
gregoriancalendar gc =
newgregoriancalendar()
; ******dateformat s =
new******dateformat
("yyyy-mm-dd");
try}
catch
(parseexception e)
// 月份在1-12之間
if(integer.
parseint
(month)
>
12|| integer.
parseint
(month)==0
)// 日期天數在1-31之間
if(integer.
parseint
(day)
>
31|| integer.
parseint
(day)==0
)// 判斷地區碼是否有效
hashmap areacode =
getareacode()
;// 如果身份證前兩位的地區碼不在areacode,則地區碼有誤if(
!areacode.
containskey
(card.
substring(0
,2))
)if(!
isvalidcode
(card, idcard)
)return
true;}
/** * 校驗18位身份證最後一位檢驗碼是否合規
** @param card 身份證前17位
* @param idcard 身份證號
* @return 校驗結果,true合法,false非法
*/private
static
boolean
isvalidcode
(string card, string idcard)
; string[
] wi =
;int sum =0;
for(
int i =
0; i <
17; i++
)int modvalue = sum %11;
string strverifycode = validcode[modvalue]
; card += strverifycode;if(
!stringutils.
equals
(card, idcard))}
return
true;}
/** * 校驗字串中是否全部位數字
** @param str 待校驗字串
* @return 驗證結果,true全是數字,false相反
*/public
static
boolean
isnumeric
(string str)
else
}/**
* 判斷字串出生日期是否符合正規表示式:包括年月日,閏年、平年和每月31天、30天和閏月的28天或者29天
** @param strdate 待校驗日期
* @return 校驗結果,true日期合法,false日期非法
*/private
static
boolean
isdate
(string strdate)
(([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(([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]))))))?$");
matcher m = pattern.
matcher
(strdate);if
(m.matches()
)else
}/**
* 省地區編碼對應關係
* @return map集合對應省編碼
*/private
static hashmap getareacode()
}
介面的個人理解,簡單易懂
1,內部介面,在乙個類中定義乙個介面,那麼這個類就可以通過這個介面去操作外部類的屬性了和方法了。內部介面的精髓 1 通過繼承該類中的介面,並且傳入繼承介面的物件,可以實現安對該類屬性的修改 2 並且進行實現,可以對物件的屬性直接進行修改 預留介面是等著實現的類被呼叫,注意這裡的被呼叫關係 2,繼承的...
前端最實用 全面的工具類方法
2 怎麼做這件事 從大量程式中挑選出最常用的js方法彙總 網上找出常用的方法,收集 分成大類進行彙總 3 主要大類 查詢類 ajax請求,表單請求 校驗類 正規表示式,日期,查重 資料轉換處理類 日期類,字串類 加密解密類 base64 4 現在就開始總結 一 查詢類 ajax請求,表單請求 aja...
vi 編輯器超級簡單且實用的命令
vi可以分為三種狀態,分別是命令模式 command mode 插入模式 insert mode 和底行模式 last line mode vi的基本操作 1 進入vi vi hello.py 有一點要特別注意,就是您進入vi之後是處於 command mode 下,您要切換到insert mode...