一些我在做项目过程中用到的比较重要的方法
2017-09-24 09:01
483 查看
最近的工作中确实用到了很多的方法,有些比较复杂,所以我就去网络上进行查找,主要是一些各种各样的程序,效果比较好。
第一个程序是判断身份证号码的,这个只能判断18位身份证号,15位的身份证号没有后面的校验位。
public static bool CheckIDCard18(string idNumber) { long n = 0; if (long.TryParse(idNumber.Remove(17), out n) == false || n < Math.Pow(10, 16) || long.TryParse(idNumber.Replace('x', '0').Replace('X', '0'), out n) == false) { return false;//数字验证 } string address = "11x22x35x44x53x12x23x36x45x54x13x31x37x46x61x14x32x41x50x62x15x33x42x51x63x21x34x43x52x64x65x71x81x82x91"; if (address.IndexOf(idNumber.Remove(2)) == -1) { return false;//省份验证 } string birth = idNumber.Substring(6, 8).Insert(6, "-").Insert(4, "-"); DateTime time = new DateTime(); if (DateTime.TryParse(birth, out time) == false) { return false;//生日验证 } string[] arrVarifyCode = ("1,0,x,9,8,7,6,5,4,3,2").Split(','); string[] Wi = ("7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2").Split(','); char[] Ai = idNumber.Remove(17).ToCharArray(); int sum = 0; for (int i = 0; i < 17; i++) { sum += int.Parse(Wi[i]) * int.Parse(Ai[i].ToString()); } int y = -1; Math.DivRem(sum, 11, out y); if (arrVarifyCode[y] != idNumber.Substring(17, 1).ToLower()) { return false;//校验码验证 } return true;//符合GB11643-1999标准 }
第二个程序是将阿拉伯数字金额转换成大写汉字金额。
法一是强大的正则表达式:public static string ConvertToChinese(Decimal number) { var s = number.ToString("#L#E#D#C#K#E#D#C#J#E#D#C#I#E#D#C#H#E#D#C#G#E#D#C#F#E#D#C#.0B0A"); var d = Regex.Replace(s, @"((?<=-|^)[^1-9]*)|((?'z'0)[0A-E]*((?=[1-9])|(?'-z'(?=[F-L\.]|$))))|((?'b'[F-L])(?'z'0)[0A-L]*((?=[1-9])|(?'-z'(?=[\.]|$))))", "${b}${z}"); var r = Regex.Replace(d, ".", m => "负元空零壹贰叁肆伍陆柒捌玖空空空空空空空分角拾佰仟万亿兆京垓秭穰"[m.Value[0] - '-'].ToString()); return r; }但是这种方法实在是太神奇了,一下子有些看不懂,所以在实际使用中我采用了我修改网络上的代码的法二。
法二是是采用逐位赋值然后进行对得到的结果进行处理得到实际需要的结果。
public static string GetChinese(Decimal number) { string valueStr = number.ToString(); if (valueStr.Length > 16) return "金额长度过长,无法转换"; double m; double.TryParse(valueStr, out m); valueStr = m.ToString("0000000000000000.00"); valueStr = Regex.Replace(valueStr, @"\.", ""); string digit = "零壹贰叁肆伍陆柒捌玖"; string Dom = "仟佰拾万仟佰拾亿仟佰拾万仟佰拾元角分"; string stringstore; StringBuilder chBuilder = new StringBuilder(); for (int i = 0; i < valueStr.Length; i++) { chBuilder.Append(digit[valueStr[i] - '0']); chBuilder.Append(Dom[i]); } stringstore = chBuilder.ToString(); stringstore = Regex.Replace(stringstore, "零仟", "零"); stringstore = Regex.Replace(stringstore, "零佰", "零"); stringstore = Regex.Replace(stringstore, "零拾", "零"); stringstore = Regex.Replace(stringstore, "零零零零万", ""); stringstore = Regex.Replace(stringstore, "零零零零亿", ""); while (Regex.IsMatch(stringstore, "零零")) stringstore = Regex.Replace(stringstore, "零零", "零"); stringstore = Regex.Replace(stringstore, "零亿", "亿"); stringstore = Regex.Replace(stringstore, "零万", "万"); stringstore = Regex.Replace(stringstore, "零元", "元"); stringstore = Regex.Replace(stringstore, "零角零分", ""); stringstore = Regex.Replace(stringstore, "零分", ""); stringstore = Regex.Replace(stringstore, "零角", "零"); while (stringstore.StartsWith("零")) stringstore = stringstore.Substring(1, stringstore.Length - 1); return stringstore; }
这个代码只能转换16位的金额,再大的一点的话应该也不会有那么多钱吧,16位中2位是小数,我觉得这个方法应该还是容易看懂的。
第三个程序是计算两个日期之间相差的天数,再转换成字符串表示结果。
public static string Timediff(DateTime dtstart, DateTime dtend) { string timediff = string.Empty; int D = 0, M = 0, Y = 0; while (DateTime.Compare(dtstart.AddYears(Y), dtend) <= 0) Y++; while (DateTime.Compare(dtstart.AddYears(Y - 1).AddMonths(M), dtend) <= 0) M++; while (DateTime.Compare(dtstart.AddYears(Y - 1).AddMonths(M - 1).AddDays(D), dtend) <= 0) D++; timediff = (Y - 1).ToString("0000") + (M - 1).ToString("00") + (D - 1).ToString("00"); if (Y == 0) return "00000000"; else return timediff; }这个方法比较简单,就是利用DateTime类的ADD特性计算出时间差,得到结果为“0000(年)00(月)00(日)”,如果起始日期大于截止日期,显示的结果也为“00000000”,再对字符串进行一些处理皆可以转换成汉字并且加上年月日,在这里我就不写了,那个比较简单。
以上内容仅代表个人最近的学习结果,非百分百原创,只是为了备忘。生陵兰中义第二记。
相关文章推荐
- Qt5.2.0 MinGW480 release静态版编译结果、过程及QtCreator配置分享(realfan的编译方法)(configure -h可以显示帮助)(静态编译mysql插件,需要做一些其它工作,机器上要有mysql)(不编译qtwebkit,就不用安装ActivePerl了)(用到 QMediaPlayer的编译办法)
- jquery项目中一些比较常用的简单方法
- jquery项目中一些比较常用的简单方法
- CSS实现垂直居中的常用方法 在前端开发过程中,盒子居中是常常用到的。其中 ,居中又可以分为水平居中和垂直居中。水平居中是比较容易的,直接设置元素的margin: 0 auto就可以实现。但是垂直
- 整理一些最近项目中用到的一些JS方法
- Clementine 12.0 的使用(因为比较少用,项目中用到才开始接触写一下自己的使用方法)
- 做项目中会用到的一些共公的方法
- HTTP协议中的短轮询、长轮询、长连接和短连接 序言 最近刚到公司不到一个月,正处于熟悉项目和源码的阶段,因此最近经常会看一些源码。在研究一个项目的时候,源码里面用到了HTTP的长轮询。由于之前没太
- android一些重要开源项目
- kali linux web渗透测试中用到的一些重要的工具
- Preference中比较重要的监听点击事件方法
- 一些QTP比较实用的方法
- android开发--RelativeLayout用到的一些重要的属性
- Android项目用到的一些开源项目
- android中handler的一些总结以及使用(二)之handle使用时用到的几个主要方法介绍
- JQuery中的一些重要方法
- 总结一些iOS项目中组织代码的方法
- FI_ITEMS_MASS_CHANGE 批量更新 凭证文本 (凭证被锁、一些项目没更改到的解决方法)
- Android项目从Eclipse迁移到Android Studio的过程和一些问题汇总
- 一些比较重要的算法