比较全的正则表达验证类C#

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值