程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> 一個常用的正則表達驗證類

一個常用的正則表達驗證類

編輯:關於PHP編程

     很早以前寫的一個正則表達式驗證工具類,包含了一些常見的校驗和支持自定義的正則表達式匹配,可以選擇完全匹配,也可以獲取所有匹配項。曾用它仿造Eclispe下的正則表達式插件寫過一個工具。因為最近突然有幾個朋友都在問這方面的問題,干脆就把代碼貼出來好了。

    using System;
    02.using System.Collections;
    03.using System.Text.RegularExpressions;
    04.
    05.namespace Xrinehart.Framework.Common.Validate
    06.{
    07. /**//// <summary>
    08. /// RegularMatch 的摘要說明。
    09. /// </summary>
    10. public class RegularMatch
    11. {
    12. private string _String;
    13. private bool _IsEntirety;
    14.
    15. /**//// <summary>
    16. /// 可以進行判斷的類型
    17. /// </summary>
    18. public enum Operation
    19. {
    20. Byte, SByte, Int16, Int32, Int64, Single, Double, Boolean, Char, Decimal, DateTime, Date, Time,
    21. EMail, URL, ChinaPhone, ChineseWord, ChinesePostalCode, Number, StringModel_01, StringModel_02, WideWord, NarrowWord, IPAddress,
    22. ChineseMobile, ChineseID
    23. };
    24.
    25. public RegularMatch() { }
    26.
    27. 用於判斷字符串是否是對應類型(默認為包含匹配)#region 用於判斷字符串是否是對應類型(默認為包含匹配)
    28. public bool IsAccordType(string strVerifyString, Operation op)
    29. {
    30. return IsAccordType(strVerifyString, op, false);
    31. }
    32. #endregion
    33.
    34. 用於判斷字符串是否是對應類型(或是否包含對應類型的字符)#region 用於判斷字符串是否是對應類型(或是否包含對應類型的字符)
    35. /**//// <summary>
    36. /// 用於判斷字符串是否是對應類型
    37. /// </summary>
    38. /// <param name="strVerifyString">String,需要判斷的字符串</param>
    39. /// <param name="op">Operation枚舉,用於選擇需要進行的操作</param>
    40. /// <param name="IsEntirety">Boolean,判斷是完全匹配還是包含匹配模式(僅適用於非類型判斷時)</param>
    41. /// <returns></returns>
    42. public bool IsAccordType(string strVerifyString, Operation op, bool IsEntirety)
    43. {
    44. _String = strVerifyString;
    45. _IsEntirety = IsEntirety;
    46.
    47. switch (op)
    48. {
    49. case Operation.Byte:
    50. {
    51. return IsByte();
    52. }
    53. case Operation.SByte:
    54. {
    55. return IsSByte();
    56. }
    57. case Operation.Int16:
    58. {
    59. return IsInt16();
    60. }
    61. case Operation.Int32:
    62. {
    63. return IsInt32();
    64. }
    65. case Operation.Int64:
    66. {
    67. return IsInt64();
    68. }
    69. case Operation.Single:
    70. {
    71. return IsSingle();
    72. }
    73. case Operation.Double:
    74. {
    75. return IsDouble();
    76. }
    77. case Operation.Boolean:
    78. {
    79. return IsBoolean();
    80. }
    81. case Operation.Char:
    82. {
    83. return IsChar();
    84. }
    85. case Operation.Decimal:
    86. {
    87. return IsDecimal();
    88. }
    89. case Operation.DateTime:
    90. {
    91. return IsDateTime();
    92. }
    93. case Operation.Date:
    94. {
    95. return IsDate();
    96. }
    97. case Operation.Time:
    98. {
    99. return IsTime();
    100. }
    101. case Operation.IPAddress:
    102. {
    103. return IsIPAddress();
    104. }
    105. case Operation.ChinaPhone:
    106. {
    107. return IsChinaPhone();
    108. }
    109. case Operation.ChinesePostalCode:
    110. {
    111. return IsChinesePostalCode();
    112. }
    113. case Operation.ChineseMobile:
    114. {
    115. return IsChineseMobile();
    116. }
    117. case Operation.EMail:
    118. {
    119. return IsEmail();
    120. }
    121. case Operation.URL:
    122. {
    123. return IsURL();
    124. }
    125. case Operation.ChineseWord:
    126. {
    127. return IsChineseWord();
    128. }
    129. case Operation.Number:
    130. {
    131. return IsNumber();
    132. }
    133. case Operation.StringModel_01:
    134. {
    135. return IsStringModel_01();
    136. }
    137. case Operation.StringModel_02:
    138. {
    139. return IsStringModel_02();
    140. }
    141. case Operation.WideWord:
    142. {
    143. return IsWideWord();
    144. }
    145. case Operation.NarrowWord:
    146. {
    147. return IsNarrowWord();
    148. }
    149. case Operation.ChineseID:
    150. {
    151. return IsChineseID();
    152. }
    153. default:
    154. {
    155. return false;
    156. }
    157. }
    158. }
    159. #endregion
    160.
    161. 具體驗證方法#region 具體驗證方法
    162.
    163. 是否Byte類型(8 位的無符號整數): 0 和 255 之間的無符號整數#region 是否Byte類型(8 位的無符號整數): 0 和 255 之間的無符號整數
    164. /**//// <summary>
    165. /// 是否Byte類型(8 位的無符號整數): 0 和 255 之間的無符號整數
    166. /// </summary>
    167. /// <returns>Boolean</returns>
    168. protected bool IsByte()
    169. {
    170. try
    171. {
    172. Byte.Parse(_String);
    173. }
    174. catch
    175. {
    176. return false;
    177. }
    178. return true;
    179. }
    180. #endregion
    181.
    182. 是否SByte類型(8 位的有符號整數): -128 到 +127 之間的整數#region 是否SByte類型(8 位的有符號整數): -128 到 +127 之間的整數
    183. /**//// <summary>
    184. /// 是否SByte類型(8 位的有符號整數): -128 到 +127 之間的整數
    185. /// </summary>
    186. /// <returns>Boolean</returns>
    187. protected bool IsSByte()
    188. {
    189. try
    190. {
    191. SByte.Parse(_String);
    192. }
    193. catch
    194. {
    195. return false;
    196. }
    197. return true;
    198. }
    199. #endregion
    200.
    201. 是否Int16類型(16 位的有符號整數): -32768 到 +32767 之間的有符號整數#region 是否Int16類型(16 位的有符號整數): -32768 到 +32767 之間的有符號整數
    202. /**//// <summary>
    203. /// 是否Int16類型(16 位的有符號整數): -32768 到 +32767 之間的有符號整數
    204. /// </summary>
    205. /// <returns>Boolean</returns>
    206. protected bool IsInt16()
    207. {
    208. try
    209. {
    210. Int16.Parse(_String);
    211. }
    212. catch
    213. {
    214. return false;
    215. }
    216. return true;
    217. }
    218. #endregion
    219.
    220. 是否Int32類型(32 位的有符號整數):-2,147,483,648 到 +2,147,483,647 之間的有符號整數#region 是否Int32類型(32 位的有符號整數):-2,147,483,648 到 +2,147,483,647 之間的有符號整數
    221. /**//// <summary>
    222. /// 是否Int32類型(32 位的有符號整數):-2,147,483,648 到 +2,147,483,647 之間的有符號整數
    223. /// </summary>
    224. /// <returns>Boolean</returns>
    225. protected bool IsInt32()
    226. {
    227. try
    228. {
    229. Int32.Parse(_String);
    230. }
    231. catch
    232. {
    233. return false;
    234. }
    235. return true;
    236. }
    237. #endregion
    238.
    239. 是否Int64類型(64 位的有符號整數): -9,223,372,036,854,775,808 到 +9,223,372,036,854,775,807 之間的整數#region 是否Int64類型(64 位的有符號整數): -9,223,372,036,854,775,808 到 +9,223,372,036,854,775,807 之間的整數
    240. /**//// <summary>
    241. /// 是否Int64類型(64 位的有符號整數): -9,223,372,036,854,775,808 到 +9,223,372,036,854,775,807 之間的整數
    242. /// </summary>
    243. /// <returns>Boolean</returns>
    244. protected bool IsInt64()
    245. {
    246. try
    247. {
    248. Int64.Parse(_String);
    249. }
    250. catch
    251. {
    252. return false;
    253. }
    254. return true;
    255. }
    256. #endregion
    257.
    258. 是否Single類型(單精度(32 位)浮點數字): -3.402823e38 和 +3.402823e38 之間的單精度 32 位數字#region 是否Single類型(單精度(32 位)浮點數字): -3.402823e38 和 +3.402823e38 之間的單精度 32 位數字
    259. /**//// <summary>
    260. /// 是否Single類型(單精度(32 位)浮點數字): -3.402823e38 和 +3.402823e38 之間的單精度 32 位數字
    261. /// </summary>
    262. /// <returns>Boolean</returns>
    263. protected bool IsSingle()
    264. {
    265. try
    266. {
    267. Single.Parse(_String);
    268. }
    269. catch
    270. {
    271. return false;
    272. }
    273. return true;
    274. }
    275. #endregion
    276.
    277. 是否Double類型(單精度(64 位)浮點數字): -1.79769313486232e308 和 +1.79769313486232e308 之間的雙精度 64 位數字#region 是否Double類型(單精度(64 位)浮點數字): -1.79769313486232e308 和 +1.79769313486232e308 之間的雙精度 64 位數字
    278. /**//// <summary>
    279. /// 是否Double類型(單精度(64 位)浮點數字): -1.79769313486232e308 和 +1.79769313486232e308 之間的雙精度 64 位數字
    280. /// </summary>
    281. /// <returns>Boolean</returns>
    282. protected bool IsDouble()
    283. {
    284. try
    285. {
    286. Double.Parse(_String);
    287. }
    288. catch
    289. {
    290. return false;
    291. }
    292. return true;
    293. }
    294. #endregion
    295.
    296. 是否Boolean類型(布爾值):true 或 false#region 是否Boolean類型(布爾值):true 或 false
    297. /**//// <summary>
    298. /// 是否Double類型(單精度(64 位)浮點數字): -1.79769313486232e308 和 +1.79769313486232e308 之間的雙精度 64 位數字
    299. /// </summary>
    300. /// <returns>Boolean</returns>
    301. protected bool IsBoolean()
    302. {
    303. try
    304. {
    305. Boolean.Parse(_String);
    306. }
    307. catch
    308. {
    309. return false;
    310. }
    311. return true;
    312. }
    313. #endregion
    314.
    315. 是否Char類型(Unicode(16 位)字符):該 16 位數字的值范圍為從十六進制值 0x0000 到 0xFFFF#region 是否Char類型(Unicode(16 位)字符):該 16 位數字的值范圍為從十六進制值 0x0000 到 0xFFFF
    316. /**//// <summary>
    317. /// 是否Char類型(Unicode(16 位)字符):該 16 位數字的值范圍為從十六進制值 0x0000 到 0xFFFF
    318. /// </summary>
    319. /// <returns>Boolean</returns>
    320. protected bool IsChar()
    321. {
    322. try
    323. {
    324. Char.Parse(_String);
    325. }
    326. catch
    327. {
    328. return false;
    329. }
    330. return true;
    331. }
    332. #endregion
    333.
    334. 是否Char類型(96 位十進制值):從正 79,228,162,514,264,337,593,543,950,335 到負 79,228,162,514,264,337,593,543,950,335 之間的十進制數#region 是否Char類型(96 位十進制值):從正 79,228,162,514,264,337,593,543,950,335 到負 79,228,162,514,264,337,593,543,950,335 之間的十進制數
    335. /**//// <summary>
    336. /// 是否Char類型(96 位十進制值):從正 79,228,162,514,264,337,593,543,950,335 到負 79,228,162,514,264,337,593,543,950,335 之間的十進制數
    337. /// </summary>
    338. /// <returns>Boolean</returns>
    339. protected bool IsDecimal()
    340. {
    341. try
    342. {
    343. Decimal.Parse(_String);
    344. }
    345. catch
    346. {
    347. return false;
    348. }
    349. return true;
    350. }
    351. #endregion
    352.
    353. 是否DateTime類型(表示時間上的一刻): 范圍在公元(基督紀元)0001 年 1 月 1 日午夜 12:00:00 到公元 (C.E.) 9999 年 12 月 31 日晚上 11:59:59 之間的日期和時間#region 是否DateTime類型(表示時間上的一刻): 范圍在公元(基督紀元)0001 年 1 月 1 日午夜 12:00:00 到公元 (C.E.) 9999 年 12 月 31 日晚上 11:59:59 之間的日期和時間
    354. /**//// <summary>
    355. /// 是否DateTime類型(表示時間上的一刻): 范圍在公元(基督紀元)0001 年 1 月 1 日午夜 12:00:00 到公元 (C.E.) 9999 年 12 月 31 日晚上 11:59:59 之間的日期和時間
    356. /// </summary>
    357. /// <returns>Boolean</returns>
    358. protected bool IsDateTime()
    359. {
    360. try
    361. {
    362. DateTime.Parse(_String);
    363. }
    364. catch
    365. {
    366. return false;
    367. }
    368. return true;
    369. }
    370. #endregion
    371.
    372. 是否Date類型(表示時間的日期部分): 范圍在公元(基督紀元)0001 年 1 月 1 日 到公元 (C.E.) 9999 年 12 月 31 日之間的日期#region 是否Date類型(表示時間的日期部分): 范圍在公元(基督紀元)0001 年 1 月 1 日 到公元 (C.E.) 9999 年 12 月 31 日之間的日期
    373. /**//// <summary>
    374. /// 是否Date類型(表示時間的日期部分): 范圍在公元(基督紀元)0001 年 1 月 1 日 到公元 (C.E.) 9999 年 12 月 31 日之間的日期
    375. /// </summary>
    376. /// <returns>Boolean</returns>
    377. protected bool IsDate()
    378. {
    379. DateTime Value;
    380. try
    381. {
    382. Value = DateTime.Parse(_String);
    383. }
    384. catch
    385. {
    386. return false;
    387. }
    388. if (Value.Date.ToString() == _String)
    389. {
    390. return true;
    391. }
    392. else
    393. {
    394. return false;
    395. }
    396. }
    397. #endregion
    398.
    399. 是否Time類型(表示時間部分HHMMSS): 范圍在夜 12:00:00 到晚上 11:59:59 之間的時間#region 是否Time類型(表示時間部分HHMMSS): 范圍在夜 12:00:00 到晚上 11:59:59 之間的時間
    400. /**//// <summary>
    401. /// 是否Time類型(表示時間部分HHMMSS): 范圍在夜 12:00:00 到晚上 11:59:59 之間的時間
    402. /// </summary>
    403. /// <returns>Boolean</returns>
    404. protected bool IsTime()
    405. {
    406. DateTime Value;
    407. try
    408. {
    409. Value = DateTime.Parse(_String);
    410. }
    411. catch
    412. {
    413. return false;
    414. }
    415. if (Value.Year == 1 && Value.Month == 1 && Value.Day == 1)
    416. {
    417. return true;
    418. }
    419. else
    420. {
    421. return false;
    422. }
    423. }
    424. #endregion
    425.
    426. 是否IPAddress類型(IPv4 的情況下使用以點分隔的四部分表示法格式表示,IPv6 的情況下使用冒號與十六進制格式表示)#region 是否IPAddress類型(IPv4 的情況下使用以點分隔的四部分表示法格式表示,IPv6 的情況下使用冒號與十六進制格式表示)
    427. /**//// <summary>
    428. /// 是否IPAddress類型(IPv4 的情況下使用以點分隔的四部分表示法格式表示,IPv6 的情況下使用冒號與十六進制格式表示)
    429. /// </summary>
    430. /// <returns>Boolean</returns>
    431. protected bool IsIPAddress()
    432. {
    433. try
    434. {
    435. System.Net.IPAddress.Parse(_String);
    436. }
    437. catch
    438. {
    439. return false;
    440. }
    441. return true;
    442. }
    443. #endregion
    444.
    445. 是否中國電話號碼類型(XXX/XXXX-XXXXXXX/XXXXXXXX (/d{3,4})-?/d{7,8}):判斷是否是(區號:3或4位)-(電話號碼:7或8位)#region 是否中國電話號碼類型(XXX/XXXX-XXXXXXX/XXXXXXXX (/d{3,4})-?/d{7,8}):判斷是否是(區號:3或4位)-(電話號碼:7或8位)
    446. /**//// <summary>
    447. /// 是否中國電話號碼類型(XXX/XXXX-XXXXXXX/XXXXXXXX (/d{3,4})-?/d{7,8}):判斷是否是(區號:3或4位)-(電話號碼:7或8位)
    448. /// </summary>
    449. /// <returns>Boolean</returns>
    450. protected bool IsChinaPhone()
    451. {
    452. ArrayList aryResult = new ArrayList();
    453. return CommRegularMatch(_String, @"(/d{3,4})-?/d{7,8}", RegexOptions.None, ref aryResult, _IsEntirety);
    454. }
    455. #endregion
    456.
    457. 是否中國郵政編碼(6位數字 /d{6})#region 是否中國郵政編碼(6位數字 /d{6})
    458. /**//// <summary>
    459. /// 是否中國郵政編碼(6位數字 /d{6})
    460. /// </summary>
    461. /// <returns>Boolean</returns>
    462. protected bool IsChinesePostalCode()
    463. {
    464. ArrayList aryResult = new ArrayList();
    465. return CommRegularMatch(_String, @"/d{6}", RegexOptions.None, ref aryResult, _IsEntirety);
    466. }
    467. #endregion
    468.
    469. 是否中國移動電話號碼(13開頭的總11位數字 13/d{9})#region 是否中國移動電話號碼(13開頭的總11位數字 13/d{9})
    470. /**//// <summary>
    471. /// 是否中國移動電話號碼(13開頭的總11位數字 13/d{9})
    472. /// </summary>
    473. /// <returns>Boolean</returns>
    474. protected bool IsChineseMobile()
    475. {
    476. ArrayList aryResult = new ArrayList();
    477. return CommRegularMatch(_String, @"13/d{9}", RegexOptions.None, ref aryResult, _IsEntirety);
    478. }
    479. #endregion
    480.
    481. 是否EMail類型([email protected] /w+([-+.]/w+)*@/w+([-.]/w+)*/./w+([-.]/w+)*)#region 是否EMail類型([email protected] /w+([-+.]/w+)*@/w+([-.]/w+)*/./w+([-.]/w+)*)
    482. /**//// <summary>
    483. /// 是否EMail類型([email protected] /w+([-+.]/w+)*@/w+([-.]/w+)*/./w+([-.]/w+)*)
    484. /// </summary>
    485. /// <returns>Boolean</returns>
    486. protected bool IsEmail()
    487. {
    488. ArrayList aryResult = new ArrayList();
    489. return CommRegularMatch(_String, @"/w+([-+.]/w+)*@/w+([-.]/w+)*/./w+([-.]/w+)*", RegexOptions.None, ref aryResult, _IsEntirety);
    490. }
    491. #endregion
    492.
    493. 是否Internet URL地址類型(http://)#region 是否Internet URL地址類型(http://)
    494. /**//// <summary>
    495. /// 是否Internet URL地址類型(http://)
    496. /// </summary>
    497. /// <returns>Boolean</returns>
    498. protected bool IsURL()
    499. {
    500. ArrayList aryResult = new ArrayList();
    501. return CommRegularMatch(_String, @"http://([/w-]+/.)+[/w-]+(/[/w- ./?%&=]*)?", RegexOptions.None, ref aryResult, _IsEntirety);
    502. }
    503. #endregion
    504.
    505. 是否中文字符([/u4e00-/u9fa5])#region 是否中文字符([/u4e00-/u9fa5])
    506. /**//// <summary>
    507. /// 是否中文字符([/u4e00-/u9fa5])
    508. /// </summary>
    509. /// <returns>Boolean</returns>
    510. protected bool IsChineseWord()
    511. {
    512. ArrayList aryResult = new ArrayList();
    513. return CommRegularMatch(_String, @"[/u4e00-/u9fa5]", RegexOptions.None, ref aryResult, _IsEntirety);
    514. }
    515. #endregion
    516.
    517. 是否是數字(0到9的數字[/d]+):不包括符號"."和"-"#region 是否是數字(0到9的數字[/d]+):不包括符號"."和"-"
    518. /**//// <summary>
    519. /// 是否是數字(0到9的數字[/d]+):不包括符號"."和"-"
    520. /// </summary>
    521. /// <returns>Boolean</returns>
    522. protected bool IsNumber()
    523. {
    524. ArrayList aryResult = new ArrayList();
    525. return CommRegularMatch(_String, @"[/d]+", RegexOptions.None, ref aryResult, _IsEntirety);
    526. }
    527. #endregion
    528.
    529. 是否只包含數字,英文和下劃線([/w]+)#region 是否只包含數字,英文和下劃線([/w]+)
    530. /**//// <summary>
    531. /// 是否只包含數字,英文和下劃線([/w]+)
    532. /// </summary>
    533. /// <returns>Boolean</returns>
    534. protected bool IsStringModel_01()
    535. {
    536. ArrayList aryResult = new ArrayList();
    537. return CommRegularMatch(_String, @"[/w]+", RegexOptions.None, ref aryResult, _IsEntirety);
    538. }
    539. #endregion
    540.
    541. 是否大寫首字母的英文字母([A-Z][a-z]+)#region 是否大寫首字母的英文字母([A-Z][a-z]+)
    542. /**//// <summary>
    543. /// 是否大寫首字母的英文字母([A-Z][a-z]+)
    544. /// </summary>
    545. /// <returns>Boolean</returns>
    546. protected bool IsStringModel_02()
    547. {
    548. ArrayList aryResult = new ArrayList();
    549. return CommRegularMatch(_String, @"[A-Z][a-z]+", RegexOptions.None, ref aryResult, _IsEntirety);
    550. }
    551. #endregion
    552.
    553. 是否全角字符([^/x00-/xff]):包括漢字在內#region 是否全角字符([^/x00-/xff]):包括漢字在內
    554. /**//// <summary>
    555. /// 是否全角字符([^/x00-/xff]):包括漢字在內
    556. /// </summary>
    557. /// <returns>Boolean</returns>
    558. protected bool IsWideWord()
    559. {
    560. ArrayList aryResult = new ArrayList();
    561. return CommRegularMatch(_String, @"[^/x00-/xff]", RegexOptions.None, ref aryResult, _IsEntirety);
    562. }
    563. #endregion
    564.
    565. 是否半角字符([/x00-/xff])#region 是否半角字符([/x00-/xff])
    566. /**//// <summary>
    567. /// 是否半角字符([^/x00-/xff]):包括漢字在內
    568. /// </summary>
    569. /// <returns>Boolean</returns>
    570. protected bool IsNarrowWord()
    571. {
    572. ArrayList aryResult = new ArrayList();
    573. return CommRegularMatch(_String, @"[/x00-/xff]", RegexOptions.None, ref aryResult, _IsEntirety);
    574. }
    575. #endregion
    576.
    577. 是否合法的中國身份證號碼#region 是否合法的中國身份證號碼
    578. protected bool IsChineseID()
    579. {
    580. if (_String.Length == 15)
    581. {
    582. _String = CidUpdate(_String);
    583. }
    584. if (_String.Length == 18)
    585. {
    586. string strResult = CheckCidInfo(_String);
    587. if (strResult == "非法地區" || strResult == "非法生日" || strResult == "非法證號")
    588. {
    589. return false;
    590. }
    591. else
    592. {
    593. return true;
    594. }
    595. }
    596. else
    597. {
    598. return false;
    599. }
    600. }
    601. #endregion
    602.
    603. #endregion
    604.
    605. 通用正則表達式判斷函數#region 通用正則表達式判斷函數
    606. /**//// <summary>
    607. /// 通用正則表達式判斷函數
    608. /// </summary>
    609. /// <param name="strVerifyString">String,用於匹配的字符串</param>
    610. /// <param name="strRegular">String,正則表達式</param>
    611. /// <param name="regOption">RegexOptions,配置正則表達式的選項</param>
    612. /// <param name="aryResult">ArrayList,分解的字符串內容</param>
    613. /// <param name="IsEntirety">Boolean,是否需要完全匹配</param>
    614. /// <returns></returns>
    615. public bool CommRegularMatch(string strVerifyString, string strRegular, System.Text.RegularExpressions.RegexOptions regOption, ref System.Collections.ArrayList aryResult, bool IsEntirety)
    616. {
    617. System.Text.RegularExpressions.Regex r;
    618. System.Text.RegularExpressions.Match m;
    619.
    620. 如果需要完全匹配的處理#region 如果需要完全匹配的處理
    621. if (IsEntirety)
    622. {
    623. strRegular = strRegular.Insert(0, @"/A");
    624. strRegular = strRegular.Insert(strRegular.Length, @"/z");
    625. }
    626. #endregion
    627.
    628. try
    629. {
    630. r = new System.Text.RegularExpressions.Regex(strRegular, regOption);
    631. }
    632. catch (System.Exception e)
    633. {
    634. throw (e);
    635. }
    636.
    637. for (m = r.Match(strVerifyString); m.Success; m = m.NextMatch())
    638. {
    639. aryResult.Add(m);
    640. }
    641.
    642. if (aryResult.Count == 0)
    643. {
    644. return false;
    645. }
    646. else
    647. {
    648. return true;
    649. }
    650. }
    651. #endregion
    652.
    653. 中國身份證號碼驗證#region 中國身份證號碼驗證
    654. private string CheckCidInfo(string cid)
    655. {
    656. string[] aCity = new string[] { null, null, null, null, null, null, null, null, null, null, null, "北京", "天津", "河北", "山西", "內蒙古", null, null, null, null, null, "遼寧", "吉林", "黑龍江", null, null, null, null, null, null, null, "上海", "江蘇", "浙江", "安微", "福建", "江西", "山東", null, null, null, "河南", "湖北", "湖南", "廣東", "廣西", "海南", null, null, null, "重慶", "四川", "貴州", "雲南", "西藏", null, null, null, null, null, null, "陝西", "甘肅", "青海", "寧夏", "新疆", null, null, null, null, null, "台灣", null, null, null, null, null, null, null, null, null, "香港", "澳門", null, null, null, null, null, null, null, null, "國外" };
    657. double iSum = 0;
    658. string info = string.Empty;
    659. System.Text.RegularExpressions.Regex rg = new System.Text.RegularExpressions.Regex(@"^/d{17}(/d|x)$");
    660. System.Text.RegularExpressions.Match mc = rg.Match(cid);
    661. if (!mc.Success)
    662. {
    663. return string.Empty;
    664. }
    665. cid = cid.ToLower();
    666. cid = cid.Replace("x", "a");
    667. if (aCity[int.Parse(cid.Substring(0, 2))] == null)
    668. {
    669. return "非法地區";
    670. }
    671. try
    672. {
    673. DateTime.Parse(cid.Substring(6, 4) + " - " + cid.Substring(10, 2) + " - " + cid.Substring(12, 2));
    674. }
    675. catch
    676. {
    677. return "非法生日";
    678. }
    679. for (int i = 17; i >= 0; i--)
    680. {
    681. iSum += (System.Math.Pow(2, i) % 11) * int.Parse(cid[17 - i].ToString(), System.Globalization.NumberStyles.HexNumber);
    682. }
    683. if (iSum % 11 != 1)
    684. {
    685. return ("非法證號");
    686. }
    687. else
    688. {
    689. return (aCity[int.Parse(cid.Substring(0, 2))] + "," + cid.Substring(6, 4) + "-" + cid.Substring(10, 2) + "-" + cid.Substring(12, 2) + "," + (int.Parse(cid.Substring(16, 1)) % 2 == 1 ? "男" : "女"));
    690. }
    691. }
    692. #endregion
    693.
    694. 身份證號碼15升級為18位#region 身份證號碼15升級為18位
    695. private string CidUpdate(string ShortCid)
    696. {
    697. char[] strJiaoYan = { '1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2' };
    698. int[] intQuan = { 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1 };
    699. string strTemp;
    700. int intTemp = 0;
    701.
    702. strTemp = ShortCid.Substring(0, 6) + "19" + ShortCid.Substring(6);
    703. for (int i = 0; i <= strTemp.Length - 1; i++)
    704. {
    705. intTemp += int.Parse(strTemp.Substring(i, 1)) * intQuan[i];
    706. }
    707. intTemp = intTemp % 11;
    708. return strTemp + strJiaoYan[intTemp];
    709. }
    710. #endregion
    711. }
    712.}

    1. 上一頁:
    2. 下一頁:
    Copyright © 程式師世界 All Rights Reserved