首页 > 代码库 > C#常用方法二
C#常用方法二
1 public sealed class StringTool 2 { 3 /// <summary> 4 /// 将txt文件读入字符串 5 /// </summary> 6 /// <param name="aPath"></param> 7 /// <returns></returns> 8 public static string ReadTextFile(string aPath) 9 { 10 string text = ""; 11 using (TextReader tr = new StreamReader(aPath)) 12 { 13 text = tr.ReadToEnd(); 14 } 15 return text; 16 } 17 18 /// <summary> 19 /// 将16进行编码的字符串写入到指定的文件路径 20 /// </summary> 21 /// <param name="aPath"></param> 22 /// <param name="aText"></param> 23 public static void WriteTextFile(string aPath, string aText) 24 { 25 using (TextWriter tw = new StreamWriter(aPath)) 26 { 27 tw.Write(aText); 28 } 29 } 30 31 /// <summary> 32 /// 序列化DataTable, 33 /// </summary> 34 /// <param name="aTable">需要序列化的DataTable</param> 35 /// <returns>成功返回非空字符串</returns> 36 public static string SerializerToXml(DataTable aTable) 37 { 38 StringBuilder sb = new StringBuilder(); 39 if (aTable == null) 40 return ""; 41 42 System.Xml.Serialization.XmlSerializer serializer = new System.Xml.Serialization.XmlSerializer(typeof(System.Data.DataTable)); 43 System.Xml.XmlWriter writer = System.Xml.XmlWriter.Create(sb); 44 serializer.Serialize(writer, aTable); 45 46 return sb.ToString(); 47 } 48 49 /// <summary> 50 /// 反序列化DataTable表 51 /// </summary> 52 /// <param name="aXmlData">需要反序列化的DataTable的数据</param> 53 /// <returns>成功返回DataTable,失败返回null</returns> 54 public static DataTable DeSerializerFromXml(string aXmlData) 55 { 56 if (string.IsNullOrEmpty(aXmlData)) 57 return null; 58 59 System.Xml.Serialization.XmlSerializer serializer = new System.Xml.Serialization.XmlSerializer(typeof(System.Data.DataTable)); 60 return (DataTable)serializer.Deserialize(new StringReader(aXmlData)); 61 } 62 63 /* 64 // 字符串进行16进制编码[decodeSTR],因为编码后位数不等,为了节约空间不进行等长操作,所以并以","分隔 65 // 与 StringTool.cs的函数相对应 66 function EncodeSTR(str) { 67 var t = ""; 68 for (var x = 0; x < str.length; x++) { 69 a = str.charCodeAt(x); 70 if (x != 0) { 71 t += ‘,‘; 72 } 73 t += a.toString(16).toUpperCase(); 74 } 75 return t; 76 } 77 //字符串[以","分隔]进行16进制解码,编码用[encodeSTR] 78 // 与 StringTool.cs的函数相对应 79 function DecodeSTR(str) { 80 var a1 = str.split(‘,‘); 81 for (var x = 0; x < a1.length; x++) { 82 a1[x] = String.fromCharCode(parseInt(a1[x], 16).toString(10)); 83 } 84 return a1.join(‘‘); 85 } 86 */ 87 /// <summary> 88 /// 字符串转为用,分隔的16进制字符串 解码用[decodeSTR] 与 StringTool.js的函数相对应 89 /// </summary> 90 /// <param name="str">字符串</param> 91 /// <param name="uppercase">大小写</param> 92 /// <returns>失败返回空字符串</returns> 93 static public string EncodeSTR(string str, bool uppercase = true) 94 { 95 if (string.IsNullOrEmpty(str)) 96 return ""; 97 Char[] aa = str.ToCharArray(); 98 StringBuilder sb = new StringBuilder(); 99 string strFormat = "{0:" + (uppercase == true ? "X" : "x") + "}";100 for (int i = 0; i < str.Length; i++)101 {102 sb.Append(String.Format(strFormat, Char.ConvertToUtf32(str, i)));103 sb.Append(",");104 }105 if (sb.Length > 0)106 sb.Remove(sb.Length - 1, 1);107 return sb.ToString();108 }109 110 /// <summary>111 /// 用,分隔的16进制字符串转为字符串 编码用[EncodeSTR] 与 StringTool.js的函数相对应112 /// </summary>113 /// <param name="str">用,分隔的16进制字符串</param>114 /// <returns>失败返回空字符串</returns>115 static public string DecodeSTR(string str)116 {117 if (string.IsNullOrEmpty(str))118 return "";119 string[] aHexString = str.Split(new char[] { ‘,‘ });120 StringBuilder sb = new StringBuilder();121 for (int i = 0; i < aHexString.Length; i++)122 {123 sb.Append(Char.ConvertFromUtf32(Convert.ToInt32(aHexString[i], 16)));124 }125 return sb.ToString();126 }127 128 /// <summary>129 /// 将字符串转为16进制字符串,并进行了异或加密130 /// </summary>131 /// <param name="aStr"></param>132 /// <returns></returns>133 public static string StringToHexString(string aStr)134 {135 if (string.IsNullOrEmpty(aStr))136 return "";137 byte[] b = Encoding.Unicode.GetBytes(EncryptXOR(aStr));138 return ArrayToHexString(b);139 }140 141 /// <summary>142 /// 将16进制字符串转为字符串,并进行了异或解密143 /// </summary>144 /// <param name="aStr"></param>145 /// <returns></returns>146 public static string HexStringToString(string aStr)147 {148 if (string.IsNullOrEmpty(aStr))149 return "";150 byte[] b = HexStringToArray(aStr);151 return DecryptXOR(Encoding.Unicode.GetString(b));152 }153 154 /// <summary>155 /// 字节数组到16进制字符串156 /// </summary>157 /// <param name="array"></param>158 /// <param name="uppercase">大小写</param>159 /// <returns>失败返回空字符串</returns>160 ///161 static public string ArrayToHexString(byte[] array, bool uppercase = true)162 {163 if (array == null || array.Length < 1) return "";164 string format = "x2";165 if (uppercase) format = "X2";166 StringBuilder sb = new StringBuilder();167 foreach (byte b in array) sb.Append(b.ToString(format));168 return sb.ToString();169 }170 171 /// <summary>172 /// 将16进制字符串转为字节数组173 /// </summary>174 /// <param name="aHexString"></param>175 /// <param name="uppercase"></param>176 /// <returns></returns>177 static public byte[] HexStringToArray(string aHexString, bool uppercase = true)178 {179 if (string.IsNullOrEmpty(aHexString))180 return null;181 int count = aHexString.Length / 2;182 byte[] b = new byte[count];183 for (int i = 0; i < count; i++)184 {185 string s = aHexString.Substring(i * 2, 2);186 b[i] = byte.Parse(s, System.Globalization.NumberStyles.HexNumber);187 }188 189 return b;190 }191 192 /// <summary>193 /// 在unicode 字符串中,中文的范围是在4E00..9FFF194 // 通过对字符的unicode编码进行判断来确定字符是否为中文。195 /// </summary>196 /// <param name="word"></param>197 /// <returns></returns>198 static public bool IsChineseLetter(string word)199 {200 int code = 0;201 int chfrom = Convert.ToInt32("4e00", 16); //范围(0x4e00~0x9fff)转换成int(chfrom~chend)202 int chend = Convert.ToInt32("9fff", 16);203 if (word != "")204 {205 code = Char.ConvertToUtf32(word, 0); //获得字符word中指定索引index处字符unicode编码206 if (code >= chfrom && code <= chend)207 return true; //当code在中文范围内返回true208 else209 return false; //当code不在中文范围内返回false210 }211 return false;212 }213 214 /// <summary>215 /// 判断句子中是否含有中文216 /// </summary>217 /// <param >字符串</param>218 /// <returns></returns>219 static public bool WordsInChinese(string aStr)220 {221 Regex rx = new Regex("^[\u4e00-\u9fa5]$");222 for (int i = 0; i < aStr.Length; i++)223 {224 if (rx.IsMatch(aStr[i].ToString()))225 return true;226 }227 return false;228 }229 230 /// <summary>231 /// 给定一个字符串,判断其是否只包含有汉字232 /// </summary>233 /// <param name="aStr"></param>234 /// <returns></returns>235 static public bool IsOnlyContainsChinese(string aStr)236 {237 char[] words = aStr.ToCharArray();238 foreach (char word in words)239 {240 if (IsGBCode(word.ToString()) || IsGBKCode(word.ToString())) // it is a GB2312 or GBK chinese word241 continue;242 else243 return false;244 }245 return true;246 }247 248 /// <summary>249 /// 判断一个word是否为GB2312编码的汉字250 /// </summary>251 /// <param name="word"></param>252 /// <returns></returns>253 static public bool IsGBCode(string word)254 {255 byte[] bytes = Encoding.GetEncoding("GB2312").GetBytes(word);256 if (bytes.Length <= 1) // if there is only one byte, it is ASCII code or other code257 return false;258 else259 {260 byte byte1 = bytes[0];261 byte byte2 = bytes[1];262 if (byte1 >= 176 && byte1 <= 247 && byte2 >= 160 && byte2 <= 254) //判断是否是GB2312263 return true;264 else265 return false;266 }267 }268 269 /// <summary>270 /// 判断一个word是否为GBK编码的汉字271 /// </summary>272 /// <param name="word"></param>273 /// <returns></returns>274 static public bool IsGBKCode(string word)275 {276 byte[] bytes = Encoding.GetEncoding("GBK").GetBytes(word.ToString());277 if (bytes.Length <= 1) // if there is only one byte, it is ASCII code278 return false;279 else280 {281 byte byte1 = bytes[0];282 byte byte2 = bytes[1];283 if (byte1 >= 129 && byte1 <= 254 && byte2 >= 64 && byte2 <= 254) //判断是否是GBK编码284 return true;285 else286 return false;287 }288 }289 290 /// <summary>291 /// 判断一个word是否为Big5编码的汉字292 /// </summary>293 /// <param name="word"></param>294 /// <returns></returns>295 static public bool IsBig5Code(string word)296 {297 byte[] bytes = Encoding.GetEncoding("Big5").GetBytes(word.ToString());298 if (bytes.Length <= 1) // if there is only one byte, it is ASCII code299 return false;300 else301 {302 byte byte1 = bytes[0];303 byte byte2 = bytes[1];304 if ((byte1 >= 129 && byte1 <= 254) && ((byte2 >= 64 && byte2 <= 126) || (byte2 >= 161 && byte2 <= 254))) //判断是否是Big5编码305 return true;306 else307 return false;308 }309 }310 311 /// <summary>312 /// 对字符串进行简单的异或加密313 /// </summary>314 /// <param name="aStr"></param>315 /// <param name="aXor"></param>316 /// <returns>失败返回空字符串</returns>317 static public string EncryptXOR(string aStr, byte aXor = 0x11)318 {319 if (String.IsNullOrEmpty(aStr))320 return "";321 byte[] bb = Encoding.Unicode.GetBytes(aStr);322 for (int i = 0; i < bb.Length; i++)323 bb[i] ^= aXor;324 return Encoding.Unicode.GetString(bb);325 }326 327 /// <summary>328 /// 对字符串进行简单的异或解密329 /// </summary>330 /// <param name="aStr"></param>331 /// <param name="aXor"></param>332 /// <returns>失败返回空字符串</returns>333 static public string DecryptXOR(string aStr, byte aXor = 0x11)334 {335 if (String.IsNullOrEmpty(aStr))336 return "";337 byte[] bb = Encoding.Unicode.GetBytes(aStr);338 for (int i = 0; i < bb.Length; i++)339 bb[i] ^= aXor;340 return Encoding.Unicode.GetString(bb);341 }342 343 /// <summary>344 /// 获得字符串中开始和结束字符串中间得字符345 /// </summary>346 /// <param name="str">字符串</param>347 /// <param name="s">开始</param>348 /// <param name="e">结束</param>349 /// </summary>350 public static string GetSubString(string str, string s, string e)351 {352 Regex rg = new Regex("(?<=(" + s + "))[.\\s\\S]*?(?=(" + e + "))", RegexOptions.Multiline | RegexOptions.Singleline);353 return rg.Match(str).Value;354 }355 356 /// <summary>357 /// 从最后一位验证前面17位的18位身份证号码358 /// </summary>359 /// <param name="id"></param>360 /// <returns></returns>361 public static bool CheckCardId(string id)362 {363 /* 身份证号码的验证及15位升18位算法364 18位身份证标准在国家质量技术监督局于1999年7月1日实施的GB11643-1999《公民身份号码》中做了明确的规定。 GB11643-1999《公民身份号码》为GB11643-1989《社会保障号码》的修订版,其中指出将原标准名称"社会保障号码"更名为"公民身份号码",另外GB11643-1999《公民身份号码》从实施之日起代替GB11643-1989。GB11643-1999《公民身份号码》主要内容如下:365 一、范围366 该标准规定了公民身份号码的编码对象、号码的结构和表现形式,使每个编码对象获得一个唯一的、不变的法定号码。367 二、编码对象368 公民身份号码的编码对象是具有中华人民共和国国籍的公民。369 三、号码的结构和表示形式370 1、号码的结构371 公民身份号码是特征组合码,由十七位数字本体码和一位校验码组成。排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码。372 2、地址码373 表示编码对象常住户口所在县(市、旗、区)的行政区划代码,按GB/T2260的规定执行。374 3、出生日期码375 表示编码对象出生的年、月、日,按GB/T7408的规定执行,年、月、日代码之间不用分隔符。376 4、顺序码377 表示在同一地址码所标识的区域范围内,对同年、同月、同日出生的人编定的顺序号,顺序码的奇数分配给男性,偶数分配给女性。378 5、校验码379 (1)十七位数字本体码加权求和公式380 S = Sum(Ai * Wi),先对前17位数字的权求和381 Ai:表示第i位置上的身份证号码数字值382 Wi:表示第i位置上的加权因子383 Wi: 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2384 (2)计算模 Y = mod(S, 11)385 (3)通过模得到对应的校验码386 Y: 0 1 2 3 4 5 6 7 8 9 10387 校验码: 1 0 X 9 8 7 6 5 4 3 2388 四、举例如下:389 北京市朝阳区: 11010519491231002X390 广东省汕头市: 440524188001010014391 */392 393 int[] wQuan = { 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 };394 string checkWei = "10X98765432";395 396 string number17 = id.Substring(0, 17);397 string number18 = id.Substring(17);398 399 int sum = 0;400 for (int i = 0; i < 17; i++)401 sum = sum + Convert.ToInt32(number17[i].ToString()) * wQuan[i];402 403 int mod = sum % 11;404 string result = checkWei[mod].ToString();405 if (number18.Equals(result, StringComparison.OrdinalIgnoreCase))406 {407 return true;408 }409 else410 {411 return false;412 }413 }414 415 /// <summary>416 /// 生成一个序列号,根据Guid生成,最短1位,最长33位,默认是4位417 /// </summary>418 /// <param name="aLength"></param>419 /// <returns></returns>420 public static string CreateSerialNumber(int aLength = 4)421 {422 if (aLength < 1)423 aLength = 1;424 if (aLength > 33)425 aLength = 33;426 427 string str = string.Empty;428 string codeStr = string.Empty;429 string guidStr = Guid.NewGuid().ToString().Replace("-", "");430 int guidStrLen = guidStr.Length;431 Random rnd = new Random(int.Parse(DateTime.Now.ToString("MMddHHmmsss")));432 433 for (int i = 0; i < aLength; i++)434 {435 int index = rnd.Next(0, guidStrLen - 1);436 str += guidStr.Substring(index, 1);437 }438 439 return str.ToUpper();440 }441 442 /// <summary>443 /// 反转字符串444 /// </summary>445 /// <param name="aString"></param>446 /// <returns></returns>447 public static string ReverseString(string aString)448 {449 if (string.IsNullOrEmpty(aString))450 return "";451 Char[] LS_Str = aString.ToCharArray();452 Array.Reverse(LS_Str);453 454 return new String(LS_Str);//反转字符串455 }456 457 /// <summary>458 /// 全角转半角459 /// </summary>460 /// <param name="aString"></param>461 /// <returns></returns>462 public static string QjToBj(string aString)463 {464 string QJstr = aString;465 char[] c = QJstr.ToCharArray();466 for (int i = 0; i < c.Length; i++)467 {468 byte[] b = System.Text.Encoding.Unicode.GetBytes(c, i, 1);469 if (b.Length == 2)470 {471 if (b[1] == 255)472 {473 b[0] = (byte)(b[0] + 32);474 b[1] = 0;475 c[i] = System.Text.Encoding.Unicode.GetChars(b)[0];476 }477 }478 }479 string strNew = new string(c);480 return strNew;481 }482 483 /// <summary>484 /// 获得汉字拼音的的第一个字母485 /// </summary>486 /// <param name="aText"></param>487 /// <returns></returns>488 static public string GetChineseSpellFirstLetter(string aText)489 {490 int len = aText.Length;491 string myStr = "";492 for (int i = 0; i < len; i++)493 {494 myStr += GetSpell(aText[i]);495 }496 return myStr.ToLower();497 }498 499 /// <summary>500 /// 利用汉字在计算机里面的编码来的到汉字的拼音。501 /// </summary>502 /// <param name="aChar"></param>503 /// <returns></returns>504 static public string GetSpell(char aChar)505 {506 byte[] arrCN = Encoding.Default.GetBytes(aChar.ToString());507 if (arrCN.Length > 1)508 {509 int area = (short)arrCN[0];510 int pos = (short)arrCN[1];511 int code = (area << 8) + pos;512 int[] areacode = { 45217, 45253, 45761, 46318, 46826, 47010, 47297, 47614, 48119, 48119, 49062, 49324, 49896, 50371, 50614, 50622, 50906, 51387, 51446, 52218, 52698, 52698, 52698, 52980, 53689, 54481 };513 for (int i = 0; i < 26; i++)514 {515 int max = 55290;516 if (i != 25) max = areacode[i + 1];517 if (areacode[i] <= code && code < max)518 {519 return Encoding.Default.GetString(new byte[] { (byte)(65 + i) });520 }521 }522 return aChar.ToString();523 }524 else525 return aChar.ToString();526 }527 }
C#常用方法二
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。