验证、截取、生成 字符
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 }