簡單易懂且實用全面的身份證校驗工具類,超詳細注釋

2021-10-08 04:54:47 字數 3351 閱讀 1156

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...