手機號正則
/**
* 手機號碼正則判斷
*/funisphonenum
(phone: string)
: boolean $"
)val matcher = compile.
matcher
(phone)
return matcher.
matches()
}//支援13、14、15、16、17、18、19開頭後面任意搭9位
判斷是否是身份證
/**
* 省份證id正則校驗
*/funisidnumber
(idnumber: string?
): boolean
// 定義判別使用者身份證號的正規表示式(15位或者18位,最後一位可以為字母)
val regularexpression =
"(^[1-9]\\d(18|19|20)\\d((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\\d[0-9xx]$)|"
+"(^[1-9]\\d\\d((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\\d$)"
//假設18位身份證號碼:41000119910101123x 410001 19910101 123x
//^開頭
//[1-9] 第一位1-9中的乙個 4
//\\d 五位數字 10001(前六位省市縣地區)
//(18|19|20) 19(現階段可能取值範圍18xx-20xx年)
//\\d 91(年份)
//((0[1-9])|(10|11|12)) 01(月份)
//(([0-2][1-9])|10|20|30|31)01(日期)
//\\d 三位數字 123(第十七位奇數代表男,偶數代表女)
//[0-9xx] 0123456789xx其中的乙個 x(第十八位為校驗值)
//$結尾
//假設15位身份證號碼:410001910101123 410001 910101 123
//^開頭
//[1-9] 第一位1-9中的乙個 4
//\\d 五位數字 10001(前六位省市縣地區)
//\\d 91(年份)
//((0[1-9])|(10|11|12)) 01(月份)
//(([0-2][1-9])|10|20|30|31)01(日期)
//\\d 三位數字 123(第十五位奇數代表男,偶數代表女),15位身份證不含x
//$結尾
val matches = idnumber.
matches
(regularexpression.
toregex()
)//判斷第18位校驗值
if(matches)
val idcardlast = chararray[17]
val idcardmod = sum %
11if
(idcardy[idcardmod]
.touppercase()
== idcardlast.
tostring()
.touppercase()
)else
}catch
(e: exception)}}
return matches
}
規則注視中有的並不是任意組合就是身份證根據身份證計算年齡
/**
* 計算年齡
*/funidcardtoage
(idcard: string)
: int else if (yearminus == 0) else if (yearminus > 0)
} else if (monthminus > 0)
}*/return age
}
>這裡我只精確到年份,如果要精確到月份的話則只需要**中注釋的部分開啟
kotlin正則的使用
1.正則一些常用的轉義符。任意單個字元 0或乙個前置元素 1或n個前置元素 任意個前置元素 後置元素起始 後置元素結束 ab a或b a h a到h任意乙個都可以,表示區間,沒有就只有明確寫出的字元才符合 s 空格符 w 大小寫字母和數字,a za z0 9 d 數字,大小寫 哈哈哈哈哈哈哈哈 前置...
記憶體對齊的規則以及作用
首先由乙個程式引入話題 include using namespace std struct st1 struct st2 int main cout 程式的輸出結果為 sizeof st1 is 12 sizeof st2 is 8 問題出來了,這兩個一樣的結構體,為什麼sizeof的時候大小不一...
記憶體對齊的規則以及作用
首先由乙個程式引入話題 1 環境 vc6 windows sp22 程式13 include iostream 45 using namespace std 67 struct st1 8 1314 struct st215 20 21int main 2227 程式的輸出結果為 sizeof st...