ホームページ >バックエンド開発 >PHPチュートリアル >よく使用される正規表現の検証 class_PHP チュートリアル

よく使用される正規表現の検証 class_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-13 10:08:03953ブラウズ

よく使用される正規表現検証クラス

かなり前に作成された正規表現検証ツール クラスで、いくつかの一般的なチェックサムが含まれており、完全一致を選択することも、すべての一致を取得することもできます。私はかつてこれを使用して、Eclispe の正規表現プラグインを模倣するツールを作成しました。最近何人かの友人がこの点に関して突然質問してきたので、コードを投稿しておこうと思います。

システムの使用;
02.System.Collections を使用する;
03.System.Text. RegularExpressions を使用する;
04.
05.namespace Xrinehart.Framework.Common.Validate
06.{
07. /**////
08. /// RegularMatch の概要説明。
09. /// 10. パブリッククラス RegularMatch
11.{
12. プライベート文字列 _String;
13.プライベートブール_IsEntirety;
14.
15./**//// <概要>
16. /// 判定できる種類
17. /// 18. パブリック列挙操作
19.{
20. Byte、SByte、Int16、Int32、Int64、Single、Double、Boolean、Char、Decimal、DateTime、Date、Time、
21. 電子メール、URL、ChinaPhone、 ChineseWord、 ChinesePostalCode、 Number、 StringModel_01、 StringModel_02、 WideWord、 NarrowWord、 IPAddress、
22. チャイニーズモバイル、チャイニーズID
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. #エンドリージョン
33.
34. 文字列が対応する型であるかどうか (または対応する型の文字が含まれているかどうか) を判断するために使用されます #region は、文字列が対応する型であるかどうか (または対応する型の文字が含まれるかどうか) を判断するために使用されます
35. /**////
36. /// 文字列が対応する型であるかどうかを判断するために使用されます
37. /// 38. /// String、判定対象の文字列 39. /// 実行する操作を選択するために使用される操作の列挙 40. /// ブール値、完全に一致するか、一致するパターンが含まれているかを判断します (型以外の判断にのみ適用されます) 41. /// 42. public bool IsAccordType(string strVerifyString, Operation op, bool IsEntirety)
43.{
44. _String = strVerifyString;
45. _IsEntirety = IsEntirety;
46.
47.スイッチ(OP)
48.{
49. ケース操作.バイト:
50.{
51. IsByte();
を返す 52. }
53. ケースオペレーション.SByte:
54.{
55. IsSByte();
を返す 56. }
57. ケース Operation.Int16:
58.{
59. IsInt16();
を返す 60. }
61. ケース Operation.Int32:
62.{
63. return IsInt32();
64. }
65. ケース Operation.Int64:
66.{
67. return IsInt64();
68. }
69. ケースオペレーション.シングル:
70.{
71. IsSingle();
を返す 72. }
73. case Operation.Double:
74.{
75. return IsDouble();
76. }
77. ケース Operation.Boolean:
78.{
79. return IsBoolean();
80. }
81. ケースオペレーション.Char:
82.{
83. IsChar();
を返す 84. }
85. ケース操作.10 進数:
86.{
87. IsDecimal();
を返す 88. }
89. ケース操作.日時:
90.{
91. IsDateTime();
を返す 92. }
93. 事件作戦.日付:
94.{
95. IsDate();
を返す 96. }
97.事件操作時間:
98.{
99. return IsTime();
100. }
101. ケース Operation.IPAddress:
102.{
103. IsIPAddress();
を返す 104. }
105. 事件運営.中国電話:
106.{
107. IsChinaPhone();
を返す 108. }
109. ケース オペレーション.中国の郵便番号:
110.{
111. Is ChinesePostalCode();
を返す 112. }
113. ケース操作.中国モバイル:
114.{
115. Is ChineseMobile();
を返す 116. }
117. ケース操作.メール:
118.{
119. IsEmail();
を返す 120. }
121. 事件運営.URL:
122.{
123. IsURL();
を返す 124. }
125. ケース操作.中国語単語:
126.{
127. Is ChineseWord();
を返す 128. }
129. 事件作戦番号:
130.{
131. IsNumber();
を返す 132. }
133. ケース Operation.StringModel_01:
134.{
135. IsStringModel_01();
を返す 136. }
137. ケース Operation.StringModel_02:
138.{
139. IsStringModel_02();
を返す 140. }
141. ケース操作.ワイドワード:
142.{
143. return IswideWord();
144. }
145. ケース操作.NarrowWord:
146.{
147. return IsNarrowWord();
148. }
149. 事件作戦.中国語ID:
150.{
151. Is ChineseID();
を返す 152. }
153.デフォルト:
154.{
155. falseを返す;
156. }
157. }
158. }
159. #エンドリージョン
160.
161. 具体的な確認方法#地域 具体的な確認方法
162.
163. Byte型(8ビット符号なし整数)かどうか:0~255の符号なし整数 #region Byte型(8ビット符号なし整数)かどうか:0~255の符号なし整数
164. /**////
165. /// バイト型(8ビット符号なし整数)かどうか: 0~255の符号なし整数
166. /// 167. /// ブール 168. protected bool IsByte()
169.{
170. 試してみる
171.{
172. Byte.Parse(_String);
173. }
174. キャッチ
175.{
176. falseを返す;
177. }
178. true を返す;
179. }
180. #エンドリージョン
181.
182. SByte型(8ビット符号付き整数)かどうか:-128から+127までの整数#region SByte型(8ビット符号付き整数)かどうか:-128から+127までの整数
183. /**////
184. /// SByte型(8ビット符号付き整数)かどうか: -128から+127までの整数
185. /// 186. /// ブール 187. protected bool IsSByte()
188.{
189. 試してみる
190.{
191. SByte.Parse(_String);
192. }
193. キャッチ
194.{
195. falseを返す;
196. }
197. true を返す;
198. }
199. #エンドリージョン
200.
201. Int16 型 (16 ビット符号付き整数) かどうか: -32768 ~ +32767 の符号付き整数 #region Int16 型 (16 ビット符号付き整数) かどうか: -32768 ~ +32767 の符号付き整数+32767
202. /**////
203. /// Int16型(16ビット符号付き整数)かどうか: -32768から+32767までの符号付き整数
204. /// 205. /// ブール 206. protected bool IsInt16()
207.{
208. 試してみる
209.{
210. Int16.Parse(_String);
211. }
212. キャッチ
213.{
214. falseを返す;
215. }
216. true を返す;
217. }
218. #エンドリージョン
219.
220. Int32 型 (32 ビット符号付き整数) ですか: -2,147,483,648 と +2,147,483,647 の間の符号付き整数 #region Int32 型 (32 ビット符号付き整数) ですか: -2,147,483,648 と +2,147,483,647 の間の符号付き整数
221. /**////
222. /// Int32 型 (32 ビット符号付き整数) かどうか: -2,147,483,648 から +2,147,483,647 までの符号付き整数
223. /// 224. /// ブール 225. protected bool IsInt32()
226.{
227. 試してみる
228.{
229. Int32.Parse(_String);
230. }
231. キャッチ
232.{
233. falseを返す;
234. }
235. true を返す;
236. }
237. #エンドリージョン
238.
239. Int64 型 (64 ビット符号付き整数) かどうか: -9,223,372,036,854,775,808 ~ +9,223,372,036,854,775,807 Integer #region Int64 型 (64 ビット符号付き整数) かどうか: -9,223,372,036,854,77 5 、808 から +9,223,372,036,854,775,807 までの整数
240. /**////
241. /// Int64 型 (64 ビット符号付き整数) かどうか: -9,223,372,036,854,775,808 から +9,223,372,036,854,775,807 までの整数
242. /// 243. /// ブール 244. protected bool IsInt64()
245.{
246. 試してみる
247.{
248. Int64.Parse(_String);
249. }
250. キャッチ
251.{
252. falseを返す;
253. }
254. true を返す;
255. }
256. #エンドリージョン
257.
258. Single型(単精度(32ビット)浮動小数点数)かどうか: 単精度32ビット数値 #-3.402823e38から+3.402823e38までの領域 Single-type(単精度(32ビット)浮動小数点数)かどうか精度 (32 ビット) 浮動小数点数): - 3.402823e38 から +3.402823e38 までの単精度 32 ビット数値
259. /**////
260. /// Single 型 (単精度 (32 ビット) 浮動小数点数) かどうか: -3.402823e38 から +3.402823e38 までの単精度 32 ビット数値
261. /// 262. /// ブール 263. protected bool IsSingle()
264.{
265. 試してみる
266.{
267. Single.Parse(_String);
268. }
269. キャッチ
270.{
271. falseを返す;
272. }
273. true を返す;
274. }
275. #エンドリージョン
276.
277. Double型(単精度(64ビット)浮動小数点数)かどうか: -1.79769313486232e308から+1.79769313486232e308までの倍精度64ビット数値 #region Double型(単精度(64ビット)浮動小数点数)かどうか-bit) 浮動小数点数): - 1.79769313486232e308 から +1.79769313486232e308 までの倍精度 64 ビット数値
278. /**////
279. /// Double 型 (単精度 (64 ビット) 浮動小数点数) かどうか: -1.79769313486232e308 から +1.79769313486232e308 までの倍精度 64 ビット数値
280. /// 281. /// ブール値 282. protected bool IsDouble()
283.{
284. 試してみる
285.{
286. Double.Parse(_String);
287. }
288. キャッチ
289.{
290. falseを返す;
291. }
292. true を返す;
293. }
294. #エンドリージョン
295.
296. ブール型(ブール値)かどうか: true か false #region ブール型(ブール値)かどうか: true か false
297. /**////
298. /// Double 型 (単精度 (64 ビット) 浮動小数点数) かどうか: -1.79769313486232e308 から +1.79769313486232e308 までの倍精度 64 ビット数値
299. /// 300. /// ブール 301. protected bool IsBoolean()
302.{
303. 試してみる
304.{
305. ブール値.Parse(_String);
306. }
307. キャッチ
308.{
309. false を返す;
310. }
311. true を返す;
312. }
313. #エンドリージョン
314.
315. Char 型 (Unicode (16 ビット) 文字) かどうか: この 16 ビット数値の値の範囲は、16 進数値 0x0000 から 0xFFFF#region です。 Char 型 (Unicode (16 ビット) 文字) かどうか:この 16 ビット数値の値の範囲は 16 進値 0x0000 から 0xFFFF です
316. /**////
317. /// Char 型 (Unicode (16 ビット) 文字) かどうか: この 16 ビット数値の値の範囲は 16 進値 0x0000 から 0xFFFF です
318. /// 319. /// ブール値 320. protected bool IsChar()
321.{
322. 試してみる
323.{
324. 文字解析(_String);
325. }
326. キャッチ
327.{
328. false を返す;
329. }
330. true を返す;
331. }
332. #エンドリージョン
333.
334. Char 型 (96 ビット 10 進数値) かどうか: 正の 79,228,162,514,264,337,593,543,950,335 と負の 79,228,162,514,264,337,593,543,950,335 の間の 10 進数 #領域が Char 型 (96 ビット) であるかどうか10 進数値) : 正の 79,228,162,514,264,337,593,543,950,335 までの 10 進数
335. /**////
336. /// Char 型 (96 ビット 10 進数値) かどうか: 正の 79,228,162,514,264,337,593,543,950,335 と負の 79,228,162,514,264,337,593,543,950,335 の間の 10 進数
337. /// 338. /// ブール値 339. protected bool IsDecimal()
340.{
341. 試してみる
342.{
343. Decimal.Parse(_String);
344. }
345. キャッチ
346.{
347. false を返す;
348. }
349. true を返す;
350. }
351. #エンドリージョン
352.
353. DateTime 型であるかどうか (時刻を表す): 範囲は、西暦 0001 年 1 月 1 日の午前 12:00:00 (西暦) から西暦 9999 年 12 月 31 日の午後 11:59:59 までです ( #region 間の日付と時刻は DateTime タイプ (瞬間を表す) です。範囲は、西暦 0001 年 1 月 1 日 (西暦) の真夜中 12:00:00 から、西暦 9999 年 12 月 31 日の午後 11 時 (西暦) までです。 ):59:59 間の日時
354. /**////
355. /// DateTime 型かどうか (時刻を表す): 範囲は、西暦 0001 年 1 月 1 日の午前 12 時 0 分 00 秒 (西暦) から、西暦 9999 年 12 月 31 日の午後 11 時 59 分までです。 (C.E.) 日時:59
356. /// 357. /// ブール値 358. protected bool IsDateTime()
359.{
360. 試してみる
361.{
362.DateTime.Parse(_String);
363. }
364. キャッチ
365. {
366. false を返す;
367. }
368. true を返す;
369. }
370. #エンドリージョン
371.
372. Date 型かどうか (時刻を表す日付部分): 日付の範囲は、西暦 0001 年 1 月 1 日 (西暦) から西暦 9999 年 12 月 31 日までです。 #region Date 型かどうか (日付部分)時刻を表す部分) 日付部分): 西暦 0001 年 1 月 1 日 (西暦) から西暦 9999 年 12 月 31 日までの日付
373. /**////
374. /// Date 型 (時刻を表す日付部分) かどうか: 西暦 0001 年 1 月 1 日 (西暦) から西暦 9999 年 12 月 31 日までの日付
375. /// 376. /// ブール値 377. protected bool IsDate()
378.{
379. 日時値;
380. 試してみる
381.{
382. 値 = DateTime.Parse(_String);
383. }
384. キャッチ
385.{
386. falseを返す;
387. }
388. if (Value.Date.ToString() == _String)
389.{
390. true を返す;
391. }
392.else
393.{
394. false を返す;
395. }
396. }
397. #エンドリージョン
398.
399. Time タイプであるかどうか (時間部分 HHMMSS を表す): 範囲は午後 12:00:00 から 11:59:59 pm#region です。 Time タイプであるかどうか (時間部分 HHMMSS を表します):範囲は午後 12:00:00 ~ 午後 11:59:59 です
400. /**////
401. /// 時刻タイプかどうか (時刻部分 HHMMSS を示す): 範囲は夜 12:00:00 から夜 11:59:59 までです
402. /// 403. /// ブール値 404. protected bool IsTime()
405.{
406. 日時値;
407. 試してみる
408.{
409. 値 = DateTime.Parse(_String);
410. }
411.キャッチ
412.{
413. falseを返す;
414. }
415. if (値.年 == 1 && 値.月 == 1 && 値.日 == 1)
416.{
417. true を返す;
418. }
419.else
420.{
421. falseを返す;
422. }
423. }
424. #エンドリージョン
425.
426. IPAddress の種類かどうか(IPv4 の場合はドット区切りの 4 部表記、IPv6 の場合はコロンと 16 進数の形式) #region IPAddress の種類かどうか(IPv4 の場合は、ドット区切り表記形式を使用) 4 部表記形式で表現、IPv6 の場合はコロンと 16 進形式が使用されます)
427. /**////
428. /// IPAddress タイプかどうか (IPv4 の場合はドット区切りの 4 部表記形式、IPv6 の場合はコロンと 16 進数形式で表現)
429. /// 430. /// ブール値 431. protected bool IsIPAddress()
432.{
433. 試してみる
434.{
435. System.Net.IPAddress.Parse(_String);
436. }
437. キャッチ
438.{
439. false を返す;
440. }
441. true を返す;
442. }
443. #エンドリージョン
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. /**////
447. /// 中国の電話番号のタイプは (XXX/XXXX-XXXXXXX/XXXXXXXX (/d{3,4})-?/d{7,8}) であるかどうかを判断します (市外局番: 3 または 4)桁)- (電話番号: 7 桁または 8 桁)
448. /// 449. /// ブール 450. protected bool IsChinaPhone()
451.{
452. ArrayList aryResult = new ArrayList();
453. return Comm RegularMatch(_String, @"(/d{3,4})-?/d{7,8}", RegexOptions.None, ref aryResult, _IsEntirety);
454. }
455. #エンドリージョン
456.
457. 中国の郵便番号です (6 桁/d{6}) #region 中国の郵便番号です (6 桁/d{6})
458. /**////
459. /// 中国の郵便番号です (6 桁の /d{6})
460. /// 461. /// ブール 462. protected bool Is ChinesePostalCode()
463.{
464. ArrayList aryResult = new ArrayList();
465. return Comm RegularMatch(_String, @"/d{6}", RegexOptions.None, ref aryResult, _IsEntirety);
466. }
467. #エンドリージョン
468.
469. China Mobile の電話番号ですか (13 13/d{9} で始まる合計 11 桁) #region China Mobile の電話番号ですか (13 13/d{9} で始まる合計 11 桁)
470. /**////
471. /// 中国携帯電話番号ですか (13 13/d{9} で始まる合計 11 桁)
472. /// 473. /// ブール 474. protected bool Is ChineseMobile()
475.{
476. ArrayList aryResult = new ArrayList();
477. return Comm RegularMatch(_String, @"13/d{9}", RegexOptions.None, ref aryResult, _IsEntirety);
478. }
479. #エンドリージョン
480.
481. 電子メールのタイプです (XXX@XXX.XXX /w+([-+.]/w+)*@/w+([-.]/w+)*/./w+([-.]/w+)*)#region メールタイプかどうか (XXX@XXX.XXX /w+([-+.]/w+)*@ /w+( [-.]/w+)*/./w+([-.]/w+)*)
482. /**////
483. /// メールの種類が (XXX@XXX.XXX /w+([-+.]/w+)*@/w+([-.]/w+) であるかどうか*/./w+([-.]/w+)*)
484. /// 485. /// ブール 486. protected bool IsEmail()
487.{
488. ArrayList aryResult = new ArrayList();
489. Comm RegularMatch(_String, @"/w+([-+.]/w+)*@/w+([-.]/w+)*/./w+([-.]/w+)*", RegexOptions を返します。なし、ref aryResult、_IsEntirety);
490. }
491. #エンドリージョン
492.
493. インターネット URL アドレスのタイプ (http://) #region インターネット URL アドレスのタイプ (http://) です
494. /**////
495. /// インターネット URL アドレス タイプ (http://) かどうか
496. /// 497. /// ブール 498. protected bool IsURL()
499.{
500. ArrayList aryResult = new ArrayList();
501. Comm RegularMatch(_String, @"http://([/w-]+/.)+[/w-]+(/[/w- ./?%&=]*)?", RegexOptions を返します。なし、ref aryResult、_IsEntirety);
502. }
503. #エンドリージョン
504.
505. 漢字が含まれるかどうか ([/u4e00-/u9fa5]) #region 漢字が含まれるかどうか ([/u4e00-/u9fa5])
506. /**////
507. /// 漢字かどうか ([/u4e00-/u9fa5])
508. /// 509. /// ブール値 510. protected bool Is ChineseWord()
511.{
512. ArrayList aryResult = new ArrayList();
513. return Comm RegularMatch(_String, @"[/u4e00-/u9fa5]", RegexOptions.None, ref aryResult, _IsEntirety);
514. }
515. #エンドリージョン
516.
517. 数字かどうか(0~9の数字[/d]+):記号「.」と「-」は含まない #region 数字かどうか(0~9の数字[/d]) ]+): 記号「 .」と「-」は含まれません
518. /**////
519. /// 数字かどうか (0 ~ 9[/d]+): 記号「.」と「-」を除く
520. /// 521. /// ブール 522. protected bool IsNumber()
523.{
524. ArrayList aryResult = new ArrayList();
525. return Comm RegularMatch(_String, @"[/d]+", RegexOptions.None, ref aryResult, _IsEntirety);
526. }
527. #エンドリージョン
528.
529. 数字、英語、下線([/w]+)のみか #region 数字、英語、下線([/w]+)のみかどうか
530. /**////
531. /// 数字、英語、アンダースコア ([/w]+) のみが含まれているかどうか
532. /// 533. /// ブール 534. protected bool IsStringModel_01()
535.{
536. ArrayList aryResult = new ArrayList();
537. return Comm RegularMatch(_String, @"[/w]+", RegexOptions.None, ref aryResult, _IsEntirety);
538. }
539. #エンドリージョン
540.
541. 英字の最初の文字を大文字にするかどうか([A-Z][a-z]+) #region 英字の最初の文字を大文字にするかどうか([A-Z][a-z]+)
542. /**////
543. /// 英語文字 ([A-Z][a-z]+) の最初の文字を大文字にするかどうか
544. /// 545. /// ブール 546. protected bool IsStringModel_02()
547.{
548. ArrayList aryResult = new ArrayList();
549. return Comm RegularMatch(_String, @"[A-Z][a-z]+", RegexOptions.None, ref aryResult, _IsEntirety);
550. }
551. #エンドリージョン
552.
553. 全角文字かどうか([^/x00-/xff]): 漢字を含む #region 全角文字かどうか([^/x00-/xff]): 漢字を含む
554. /**////
555. /// 全角文字かどうか([^/x00-/xff]): 漢字も含む
556. /// 557. /// ブール 558. protected bool IswideWord()
559.{
560. ArrayList aryResult = new ArrayList();
561. return Comm RegularMatch(_String, @"[^/x00-/xff]", RegexOptions.None, ref aryResult, _IsEntirety);
562. }
563. #エンドリージョン
564.
565. 半角文字([/x00-/xff])かどうか #region 半角文字([/x00-/xff])かどうか
566. /**////
567. /// 半角文字かどうか([^/x00-/xff]): 漢字も含む
568. /// 569. /// ブール値 570. protected bool IsNarrowWord()
571.{
572. ArrayList aryResult = new ArrayList();
573. return Comm RegularMatch(_String, @"[/x00-/xff]", RegexOptions.None, ref aryResult, _IsEntirety);
574. }
575. #エンドリージョン
576.
577. 中国の ID 番号は有効ですか? #地域 中国の ID 番号は合法ですか? 578. protected bool Is ChineseID()
579.{
580. if (_String.Length == 15)
581.{
582. _String = CidUpdate(_String);
583. }
584. if (_String.Length == 18)
585.{
586. 文字列 strResult = CheckCidInfo(_String);
587. if (strResult == "不正な地域" || strResult == "不正な誕生日" || strResult == "不正な証明書番号")
588.{
589. falseを返す;
590. }
591.else
592.{
593. true を返す;
594. }
595. }
596.else
597.{
598. falseを返す;
599. }
600. }
601. #エンドリージョン
602.
603. #エンドリージョン
604.
605. 汎用正規表現判定関数#region 汎用正規表現判定関数
606. /**////
607. /// 一般的な正規表現判定関数
608. /// 609. /// 文字列、マッチングに使用される文字列 610. /// 文字列、正規表現 611. /// RegexOptions、正規表現オプションを設定します 612. /// ArrayList、分解された文字列コンテンツ 613. /// ブール値、完全一致が必要かどうか 614. /// 615. public bool Comm RegularMatch(string strVerifyString, string str Regular, 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. strレギュラー = strレギュラー.Insert(0, @"/A");
624. strレギュラー = strレギュラー.Insert(strレギュラー.Length, @"/z");
625. }
626. #エンドリージョン
627.
628. 試してみる
629.{
630. r = 新しい System.Text. RegularExpressions.Regex(str Regular, regOption);
631. }
632. catch (System.Exception e)
633.{
634. 投げる (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. falseを返す;
645. }
646.else
647.{
648. true を返す;
649. }
650. }
651. #エンドリージョン
652.
653. 中国ID番号認証 #地域中国ID番号認証
654. プライベート文字列 CheckCidInfo(文字列 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. ダブル iSum = 0;
658. 文字列情報 = 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.成功)
662.{
663. 文字列を返します。空;
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. 試してみる
672.{
673. DateTime.Parse(cid.Substring(6, 4) + " - " + cid.Substring(10, 2) + " - " + cid.Substring(12, 2));
674. }
675. キャッチ
676.{
677. "不正な誕生日" を返します;
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. #エンドリージョン
693.
694. IDカード番号15が18桁にアップグレード#地域IDカード番号15が18桁にアップグレード
695. プライベート文字列 CidUpdate(文字列 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. 文字列 strTemp;
700. int intTemp = 0;
701.
702. strTemp = ShortCid.Substring(0, 6) + "19" + ShortCid.Substring(6);
703. for (int i = 0; i 704.{
705. intTemp += int.Parse(strTemp.Substring(i, 1)) * intQuan[i];
706. }
707. intTemp = intTemp % 11;
708. strTemp + strJiaoYan[intTemp]を返す;
709. }
710. #エンドリージョン
711. }
712.}

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/953965.html技術記事一般的に使用される正規表現検証クラスは、かなり前に作成された正規表現検証ツール クラスであり、いくつかの一般的なチェックサムが含まれており、カスタマイズされた正規表現マッチングをサポートしています...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。