验证、截取、生成 字符

  1  public static class Tool
  2     {
  3         /// <summary>
  4         /// 获取随机字母
  5         /// </summary>
  6         /// <param name="length"></param>
  7         /// <returns></returns>
  8         public static string GetRandomCode(int length)
  9         {
 10             var rom = new Random(Guid.NewGuid().GetHashCode());
 11             char[] allcheckRandom ={'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W',
 12                 'X','Y','Z','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q',
 13                 'r','s','t','u','v','w','x','y','z','2','3','4','5','6','7','8','9'};
 14             var randomcode = "";
 15             for (var i = 0; i < length; i++)
 16             {
 17                 randomcode += allcheckRandom[rom.Next(allcheckRandom.Length)];
 18             }
 19             return randomcode;
 20         }
 21 
 22         /// <summary>
 23         /// 获取随机字母
 24         /// </summary>
 25         /// <param name="length"></param>
 26         /// <returns></returns>
 27         public static string GetRandomNum(int length)
 28         {
 29             var rom = new Random(Guid.NewGuid().GetHashCode());
 30             char[] allcheckRandom = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };
 31             var randomcode = "";
 32             for (var i = 0; i < length; i++)
 33             {
 34                 randomcode += allcheckRandom[rom.Next(allcheckRandom.Length)];
 35             }
 36             return randomcode;
 37         }
 38 
 39         /// <summary>
 40         /// 获取时间戳字符串
 41         /// </summary>
 42         /// <param name="time"></param>
 43         /// <param name="length"></param>
 44         /// <returns></returns>
 45         public static string GetTimeStamp(System.DateTime time, int length = 13)
 46         {
 47             long ts = ConvertDateTimeToInt(time);
 48             return ts.ToString().Substring(0, length);
 49         }
 50 
 51         public static long ConvertDateTimeToInt(System.DateTime time)
 52         {
 53             System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1, 0, 0, 0, 0));
 54             long t = (time.Ticks - startTime.Ticks) / 10000;   //除10000调整为13位      
 55             return t;
 56         }
 57         /// <summary>
 58         /// 效验是否为身份证
 59         /// </summary>
 60         /// <param name="num"></param>
 61         /// <returns></returns>
 62         public static bool IsValidIdentity(string num)
 63         {
 64             num = num.ToUpper();
 65             //身份证号码为15位或者18位,15位时全为数字,18位前17位为数字,最后一位是校验位,可能为数字或字符X。 
 66             Regex regex = new Regex(@"^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$|(^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}([0-9]|X)$)");
 67             if (!regex.IsMatch(num))
 68             { return false; }
 69             //校验位按照ISO 7064:1983.MOD 11-2的规定生成,X可以认为是数字10。   
 70             //下面分别分析出生日期和校验位
 71             var len = num.Length;
 72             var arrInt = new int[] { 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 };
 73             var arrCh = new string[] { "1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2" };
 74             var nTemp = 0;
 75             if (len == 15)
 76             {
 77                 //将15位身份证转成18位   
 78                 //校验位按照ISO 7064:1983.MOD 11-2的规定生成,X可以认为是数字10。   
 79                 nTemp = 0;
 80                 num = num.Substring(0, 6) + "19" + num.Substring(6, len - 6);
 81                 for (var i = 0; i < 17; i++)
 82                 {
 83                     nTemp += int.Parse(num.Substring(i, 1)) * arrInt[i];
 84                 }
 85                 num += arrCh[nTemp % 11];
 86             }
 87             else
 88             {
 89                 //检验18位身份证的校验码是否正确。   
 90                 //校验位按照ISO 7064:1983.MOD 11-2的规定生成,X可以认为是数字10。   
 91                 nTemp = 0;
 92                 for (var i = 0; i < 17; i++)
 93                 {
 94                     nTemp += int.Parse(num.Substring(i, 1)) * arrInt[i];
 95                 }
 96                 var valnum = arrCh[nTemp % 11];
 97                 if (valnum != num.Substring(17, 1))
 98                 { return false; }
 99             }
100             var aCity = new Dictionary<int, string>
101             {
102                 {11, "北京"}, {12, "天津"}, {13, "河北"}, {14, "山西"}, {15, "内蒙古"}, {21, "辽宁"}, {22, "吉林"}, {23, "黑龙江"},
103                 {31, "上海"}, {32, "江苏"}, {33, "浙江"}, {34, "安徽"}, {35, "福建"}, {36, "江西"}, {37, "山东"},
104                 {41, "河南"}, {42, "湖北"}, {43, "湖南"}, {44, "广东"}, {45, "广西"}, {46, "海南"},
105                 {50, "重庆"}, {51, "四川"}, {52, "贵州"}, {53, "云南"}, {54, "西藏"},
106                 {61, "陕西"}, {62, "甘肃"}, {63, "青海"}, {64, "宁夏"}, {65, "新疆"}, {71, "台湾"}, {81, "香港"}, {82, "澳门"}, {91, "国外"}
107             };
108             var sId = num.Replace("X", "a");
109             var iSum = 0;
110             if (!aCity.ContainsKey(int.Parse(sId.Substring(0, 2))))
111             { return false; }
112             for (var i = 17; i >= 0; i--) { iSum += Convert.ToInt32(Math.Pow(2.0, Convert.ToDouble(i)) % 11) * Convert.ToInt32(sId.Substring(17 - i, 1), 16); }
113             return iSum % 11 == 1;
114         }
115 
116         /// <summary>
117         /// 截取出身年月日
118         /// </summary>
119         /// <param name="IDCard">身份证号</param>
120         /// <returns></returns>
121         public static string GetDate(string IDCard)
122         {
123             string BirthDay = " ";
124             string strYear;
125             string strMonth;
126             string strDay;
127             if (IDCard.Length == 15)
128             {
129                 strYear = IDCard.Substring(6, 2);
130                 strMonth = IDCard.Substring(8, 2);
131                 strDay = IDCard.Substring(10, 2);
132                 BirthDay = "19" + strYear + "- " + strMonth + "- " + strDay;
133             }
134             if (IDCard.Length == 18)
135             {
136                 strYear = IDCard.Substring(6, 4);
137                 strMonth = IDCard.Substring(10, 2);
138                 strDay = IDCard.Substring(12, 2);
139                 BirthDay = strYear + "- " + strMonth + "- " + strDay;
140             }
141             return BirthDay;
142         }
143         /// <summary>
144         /// 效验是否为邮件地址,中间必须含有@符号,例:sina@sina.com
145         /// </summary>
146         /// <param name="strIn"></param>
147         /// <returns></returns>
148         public static bool IsValidEmail(string strIn)
149         {
150             Regex regex = new Regex(@"^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$");
151             return regex.IsMatch(strIn);
152         }
153         /// <summary>
154         /// 效验是否为手机号码,11位的整数数字,例:158,8888,8888
155         /// </summary>
156         /// <param name="strIn"></param>
157         /// <returns></returns>
158         public static bool IsValidMobile(string strIn)
159         {
160             Regex regex = new Regex(@"^1[3|4|6|9|5|8|7][0-9]\d{8}$");
161             return regex.IsMatch(strIn);
162         }
163 
164         /// <summary>
165         /// 效验固定电话
166         /// </summary>
167         /// <param name="strIn"></param>
168         /// <returns></returns>
169         public static bool IsValidTelephone(string strIn)
170         {
171             Regex regex = new Regex(@"^(\d{3,4}-)?\d{7,8}$");
172             return regex.IsMatch(strIn);
173         }
174 
175         /// <summary>
176         /// 获取客户端IP地址(无视代理)
177         /// </summary>
178         /// <returns>若失败则返回回送地址</returns>
179         public static string GetHostAddress()
180         {
181             string userHostAddress = HttpContext.Current.Request.UserHostAddress;
182 
183             if (string.IsNullOrEmpty(userHostAddress))
184             {
185                 userHostAddress = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
186             }
187 
188             //最后判断获取是否成功,并检查IP地址的格式(检查其格式非常重要)
189             if (!string.IsNullOrEmpty(userHostAddress) && IsIP(userHostAddress))
190             {
191                 return userHostAddress;
192             }
193             return "127.0.0.1";
194         }
195 
196         /// <summary>
197         /// 检查IP地址格式
198         /// </summary>
199         /// <param name="ip"></param>
200         /// <returns></returns>
201         public static bool IsIP(string ip)
202         {
203             return Regex.IsMatch(ip, @"^((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)$");
204         }
205 
206     }

 

posted @ 2020-08-20 09:49  春夏秋冬的千山万水  阅读(103)  评论(0)    收藏  举报