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 }