• 厚积薄发,丰富的公用类库积累,助你高效进行系统开发(9)各种常用辅助类


    俗话说,一个好汉十个帮,众人拾柴火焰高等都说明一个道理,有更多的资源,更丰富的积累,都是助你走向成功,走向顶峰的推动力。

    本篇的公用类库的介绍主题是程序开发中常用到的各种格式转换或者数据验证的辅助类,内容范围可能比较广泛,包括XML操作、序列化及反序列化操作、命令行解析,枚举对象操作,数据格式验证等等,不过都是不可多得、好用的辅助类。

    本篇继续继续整理优化已有的共用类库,并继续发表随笔介绍公用类库的接口方法以及详细使用操作,力求给自己继续优化,积攒更丰富的公用类库资源,加深了解的同时,也给大家展现公用类库好的方面。

    厚积薄发,丰富的公用类库积累,助你高效进行系统开发(8)----非对称加密、BASE64加密、MD5等常用加密处理
    厚积薄发,丰富的公用类库积累,助你高效进行系统开发(7)-----声音播放、硬件信息、键盘模拟及钩子、鼠标模拟及钩子等设备相关 
    厚积薄发,丰富的公用类库积累,助你高效进行系统开发(6)----全屏截图、图标获取、图片打印、页面预览截屏、图片复杂操作等
    厚积薄发,丰富的公用类库积累,助你高效进行系统开发(5)----热键、多线程、窗体动画冻结等窗体操作
    厚积薄发,丰富的公用类库积累,助你高效进行系统开发(4)----CSV、Excel、INI文件、独立存储等文件相关
    厚积薄发,丰富的公用类库积累,助你高效进行系统开发(3)----数据库相关操作
    厚积薄发,丰富的公用类库积累,助你高效进行系统开发(2)----常用操作
    厚积薄发,丰富的公用类库积累,助你高效进行系统开发(1)----开篇总结

    1、序列化、反序列化、节点等操作类辅助类 XmlHelper。  

    实现效果

    1)本辅助类主要是用来方便实现XML序列化、反序列化、节点等操作。 

    2)序列化是指一个对象的实例可以被保存,保存成一个二进制串或者XML等格式字符串。反序列化这是从这些内容中还原为一个对象实例的操作。 
    3)要实现对象的序列化,首先要保证该对象可以序列化。而且,序列化只是将对象的属性进行有效的保存,对于对象的一些方法则无法实现序列化的。实现一个类可序列化的最简便的方法就是增加Serializable属性标记类。 
    4)DOM(文档对象模型)把层次中的每一个对象都称之为节点(NODE),以HTML超文本标记语言为例:整个文档的一个根就是<html>,在DOM中可以使用
    document.documentElement来访问它,它就是整个节点树的根节点(ROOT)。 

    实现代码

    1)辅助类提供的方法接口如下所示: 

    /// <summary>    
    /// 构造函数    
    /// </summary>    
    /// <param name="XmlFile">XML文件路径</param>    
    public XmlHelper(string XmlFile)   
      
    #region 静态方法    
       
    /// <summary>    
    /// 二进制序列化    
    /// </summary>    
    /// <param name="path">文件路径</param>    
    /// <param name="obj">对象实例</param>    
    /// <returns></returns>    
    public static bool Serialize(string path, object obj)    
       
    /// <summary>    
    /// XML序列化    
    /// </summary>    
    /// <param name="path">文件路径</param>    
    /// <param name="obj">对象实例</param>    
    /// <returns></returns>    
    public static bool XmlSerialize(string path, object obj, Type type)    
       
    /// <summary>    
    /// 二进制反序列化    
    /// </summary>    
    /// <param name="path">文件路径</param>    
    /// <returns></returns>    
    public static object Deserialize(string path)    
       
    /// <summary>    
    /// XML反序列化    
    /// </summary>    
    /// <param name="path">文件路径</param>    
    /// <param name="type">对象类型</param>    
    /// <returns></returns>    
    public static object XmlDeserialize(string path, Type type)   
      
    #endregion   
      
    #region 公用方法    
       
    /// <summary>    
    /// 获取指定节点下面的XML子节点    
    /// </summary>    
    /// <param name="XmlPathNode">XML节点</param>    
    /// <returns></returns>    
    public XmlNodeList Read(string XmlPathNode)    
       
    /// <summary>    
    /// 读取节点属性内容    
    /// </summary>    
    /// <param name="XmlPathNode">XML节点</param>    
    /// <param name="Attrib">节点属性</param>    
    /// <returns></returns>    
    public string Read(string XmlPathNode, string Attrib)    
       
    /// <summary>    
    /// 获取元素节点对象    
    /// </summary>    
    /// <param name="XmlPathNode">XML节点</param>    
    /// <param name="elementName">元素节点名称</param>    
    /// <returns></returns>    
    public XmlElement GetElement(string XmlPathNode, string elementName)    
       
    /// <summary>    
    /// 获取元素节点的值    
    /// </summary>    
    /// <param name="XmlPathNode">XML节点</param>    
    /// <param name="elementName">元素节点名称</param>    
    /// <returns></returns>    
    public string GetElementData(string XmlPathNode, string elementName)    
       
    /// <summary>    
    /// 获取节点下的DataSet    
    /// </summary>    
    /// <param name="XmlPathNode">XML节点</param>    
    /// <returns></returns>    
    public DataSet GetData(string XmlPathNode)    
       
    /// <summary>    
    /// 替换某节点的内容    
    /// </summary>    
    /// <param name="XmlPathNode">XML节点</param>    
    /// <param name="Content">节点内容</param>    
    public void Replace(string XmlPathNode, string Content)    
       
    /// <summary>    
    /// 删除节点    
    /// </summary>    
    /// <param name="Node">节点</param>    
    public void Delete(string Node)    
       
    /// <summary>    
    /// 插入一节点和此节点的一子节点    
    /// </summary>    
    /// <param name="MainNode"></param>    
    /// <param name="ChildNode"></param>    
    /// <param name="Element"></param>    
    /// <param name="Content"></param>    
    public void InsertNode(string MainNode, string ChildNode, string Element, string Content)    
       
    /// <summary>    
    /// 插入一个节点带一个属性     
    /// </summary>    
    /// <param name="MainNode">指定的XML节点</param>    
    /// <param name="Element">元素名称</param>    
    /// <param name="Attrib">属性名称</param>    
    /// <param name="AttribContent">属性值</param>    
    /// <param name="Content">内容</param>    
    public void InsertElement(string MainNode, string Element, string Attrib, string AttribContent, string Content)    
       
    /// <summary>    
    /// 插入XML元素    
    /// </summary>    
    /// <param name="MainNode">指定的XML节点</param>    
    /// <param name="Element">元素名称</param>    
    /// <param name="Content">内容</param>    
    public void InsertElement(string MainNode, string Element, string Content)    
       
    /// <summary>    
    /// 保存XML文档    
    /// </summary>    

    public void Save()   

    2)辅助类XmlHelper的使用例子代码如下所示 

     SearchInfo searchInfo = new SearchInfo();    

    searchInfo.FieldName = "TestFeild";    
    searchInfo.FieldValue = "TestValue";    
       
    string file = @"C:\searchInfo.xml";    
    XmlHelper.XmlSerialize(file, searchInfo, typeof(SearchInfo));    
       
    SearchInfo info2FromXml = XmlHelper.XmlDeserialize(file, typeof(SearchInfo)) as SearchInfo;    
    Console.WriteLine("{0} : {0}", info2FromXml.FieldName, info2FromXml.FieldValue);  

    XML序列化文件如下所示,并能通过该文件反序列化到对象实例中。 

    3)辅助类XmlHelper操作节点的例子代码如下所示。 

    //bookstore.xml文件内容    
    /*
       
    <?xml version="1.0" encoding="gb2312"?>   
    <bookstore>   
    <book genre="fantasy" ISBN="2-3631-4">   
        <title>Oberon's Legacy</title>   
        <author>Corets, Eva</author>   
        <price>5.95</price>   
    </book>   
    </bookstore>   
    */   
    file = @"c:\bookstore.xml";    
    XmlHelper helper = new XmlHelper(file);    
    string value = helper.Read("bookstore/book""genre");    
    Console.WriteLine(value);//fantasy    
       
    value = helper.Read("bookstore/book""ISBN");    
    Console.WriteLine(value);//2-3631-4    
       
    value = helper.GetElementData("bookstore/book""title");    
    Console.WriteLine(value);//Oberon's Legacy       
       
    XmlElement element = helper.GetElement("bookstore/book""title");    
    element.InnerText = "伍华聪";    
       
    DataSet ds = helper.GetData("bookstore/book");    

    ds.WriteXml(@"C:\ds.xml");   


    2、序列化和反序列化操作辅助类 Serializer。  

    实现效果

    1)本辅助类主要是用来方便实现序列化合反序列化操作。 

    2)序列化是指一个对象的实例可以被保存,保存成一个二进制串或者XML等格式字符串。反序列化这是从这些内容中还原为一个对象实例的操作。 
    本序列化和反序列化操作,提供二进制、XML格式、Soap格式等多种方式的操作,方便对对象实例进行各种序列化操作或者对各种格式文件的反序列化操作。 

     

    实现代码

    1)辅助类提供的方法接口如下所示: 

    #region 各种格式的序列化操作    
    /// <summary>    
    /// 序列化对象到二进制字节数组    
    /// </summary>    
    /// <param name="obj">待序列化的对象</param>    
    /// <returns></returns>    
    public static byte[] SerializeToBinary(object obj)    
       
    /// <summary>    
    /// 序列化对象到指定的文件中    
    /// </summary>    
    /// <param name="obj">待序列化的对象</param>    
    /// <param name="path">文件路径</param>    
    /// <param name="mode">文件打开方式</param>    
    public static void SerializeToBinary(object obj, string path, FileMode mode)    
       
    /// <summary>    
    /// 序列号对象到文件中,创建一个新文件    
    /// </summary>    
    /// <param name="obj">待序列化的对象</param>    
    /// <param name="path">文件路径</param>    
    public static void SerializeToBinary(object obj, string path)    
       
    /// <summary>    
    /// 序列化对象到Soap字符串中    
    /// </summary>    
    /// <param name="obj">待序列化的对象</param>    
    /// <returns></returns>    
    public static string SerializeToSoap(object obj)    
       
    /// <summary>    
    /// 序列化对象到Soap字符串中,并保存到文件    
    /// </summary>    
    /// <param name="obj">待序列化的对象</param>    
    /// <param name="path">文件路径</param>    
    /// <param name="mode">文件打开方式</param>    
    public static void SerializeToSoap(object obj, string path, FileMode mode)    
       
    /// <summary>    
    /// 序列化对象到Soap字符串中,并保存到文件    
    /// </summary>    
    /// <param name="obj">待序列化的对象</param>    
    /// <param name="path">文件路径</param>    
    public static void SerializeToSoap(object obj, string path)    
       
    /// <summary>    
    /// 序列化对象到XML字符串中    
    /// </summary>    
    /// <param name="obj">待序列化的对象</param>    
    /// <returns></returns>    
    public static string SerializeToXml(object obj)    
       
    /// <summary>    
    /// 序列化对象到XML字符串,并保存到文件中    
    /// </summary>    
    /// <param name="obj">待序列化的对象</param>    
    /// <param name="path">文件路径</param>    
    /// <param name="mode">文件打开方式</param>    
    public static void SerializeToXmlFile(object obj, string path, FileMode mode)    
       
    /// <summary>    
    /// 序列化对象到XML字符串,并保存到文件中    
    /// </summary>    
    /// <param name="obj">待序列化的对象</param>    
    /// <param name="path">文件路径</param>    
    public static void SerializeToXmlFile(object obj, string path)   
      
    #endregion    
       
       
    /// <summary>    
    /// 从指定的文件中反序列化到具体的对象    
    /// </summary>    
    /// <param name="type">对象的类型</param>    
    /// <param name="path">文件路径</param>    
    /// <returns></returns>    
    public static object DeserializeFromXmlFile(Type type, string path)    
       
    /// <summary>    
    /// 从指定的XML字符串中反序列化到具体的对象    
    /// </summary>    
    /// <param name="type">对象的类型</param>    
    /// <param name="s">XML字符串</param>    
    /// <returns></returns>    
    public static object DeserializeFromXml(Type type, string s)    
       
    /// <summary>    
    /// 从指定的Soap协议字符串中反序列化到具体的对象    
    /// </summary>    
    /// <param name="type">对象的类型</param>    
    /// <param name="s">Soap协议字符串</param>    
    /// <returns></returns>    
    public static object DeserializeFromSoap(Type type, string s)    
       
    /// <summary>    
    /// 从指定的二进制字节数组中反序列化到具体的对象    
    /// </summary>    
    /// <param name="type">对象的类型</param>    
    /// <param name="bytes">二进制字节数组</param>    
    /// <returns></returns>    
    public static object DeserializeFromBinary(Type type, byte[] bytes)    
       
    /// <summary>    
    /// 从指定的文件总,以二进制字节数组中反序列化到具体的对象    
    /// </summary>    
    /// <param name="type">对象的类型</param>    
    /// <param name="bytes">二进制字节数组存储的文件</param>    
    /// <returns></returns>    
    public static object DeserializeFromBinary(Type type, string path)    
       
    /// <summary>    
    /// 获取对象的字节数组大小    
    /// </summary>    
    /// <param name="o">对象</param>    
    /// <returns></returns>    
    public static long GetByteSize(object o)    
       
    /// <summary>    
    /// 克隆一个对象    
    /// </summary>    
    /// <param name="o">对象</param>    
    /// <returns></returns>    
    public static object Clone(object o)          

    2)辅助类的使用例子代码如下所示 

     public class TestSerializeUtil    

        {    
            public static string Execute()    
            {    
                string result = string.Empty;    
                result += "使用SerializeUtil序列化及反序列化的辅助类:" + "\r\n";    
                    
                Person person = new Person();    
                person.Name = "wuhuacong";    
                person.Age = 20;    
                    
                byte[] bytes = SerializeUtil.SerializeToBinary(person);    
                Person person2 = SerializeUtil.DeserializeFromBinary(typeof (Person), bytes) as Person;    
                result += ReflectionUtil.GetProperties(person2) + "\r\n";    
                    
                string xml = SerializeUtil.SerializeToXml(person);    
                Person person3 = SerializeUtil.DeserializeFromXml(typeof (Person), xml) as Person;    
                result += "person3:\r\n" + ReflectionUtil.GetProperties(person3) + "\r\n";    
                    
                result += "SerializeUtil.GetByteSize(person3):" + SerializeUtil.GetByteSize(person3) + "\r\n";    
                    
                Person person4 = SerializeUtil.Clone(person3) as Person;    
                result += "person4:\r\n" + ReflectionUtil.GetProperties(person4) + "\r\n";    
                    
                result += "Util.AreObjectsEqual(person3, person4):" + Util.AreObjectsEqual(person3, person4)+ "\r\n";    
                    
                SerializeUtil.SerializeToXmlFile(person3, Util.CurrentPath + "person3.xml", FileMode.Create);    
                Person person5 = SerializeUtil.DeserializeFromXmlFile(typeof (Person), Util.CurrentPath + "person3.xml"as Person;    
                result += "person5:\r\n" + ReflectionUtil.GetProperties(person5) + "\r\n\r\n";    
                    
                result += SerializeUtil.ReadFile(Util.CurrentPath + "person3.xml") + "\r\n\r\n";    
                result += SerializeUtil.ReadFileFromEmbedded("TestUtilities.EmbedFile.xml") + "\r\n\r\n";    
       
                return result;    
            }    
        }  

     

    3、实现命令行解析的常用操作的辅助类 CommandLine。  

    实现效果

    1)本辅助类主要是用来方便实现命令行解析的常用操作,命令行的解析在很多情况下是非常必要的,如自动并带参数启动的操作等。 

    2)命令行参数。这包括两个列表,一个是参数对,一个是独立的参数。 
    3)参数是定义为键/值对。参数键必须以'-', '--'或者'\'开始,在参数和值之间必须有一个空格或者字符'='。多余的空格将被忽略。参数后面必须跟着一个值,如果没有指定值,那么字符串'true'将被指定。如果值有空格,必须使用双引号来包含字符,否则字符不能被正确解析。

    实现代码

    1)辅助类提供的方法接口如下所示: 

    /// <summary>    
    /// 解析传递的命令行参数,并返回结果到一个CommandArgs对象。    
    /// 假设命令行格式: CMD [param] [[-|--|\]&lt;arg&gt;[[=]&lt;value&gt;]] [param]    
    /// 例如:cmd first -o outfile.txt --compile second \errors=errors.txt third fourth --test = "the value" fifth    
    /// </summary>    
    /// <param name="args">命令行参数数组</param>    
    /// <returns>包含转换后的命令行对象CommandArgs</returns>   

    public static CommandArgs Parse(string[] args)  

    /// <summary>    
    /// 包含解析的命令行参数。这包括两个列表,一个是参数对,一个是独立的参数。    
    /// </summary>    
    public class CommandArgs    
    {    
        /// <summary>    
        
    /// 返回参数/参数值的键值字典    
        
    /// </summary>    
        public Dictionary<stringstring> ArgPairs    
       
        /// <summary>    
        
    /// 返回独立的参数列表    
        
    /// </summary>    
        public List<string> Params    

    }   

    2)辅助类的使用例子代码如下所示 

    /// <summary>    
    /// 应用程序的主入口点。    
    /// </summary>    
    [STAThread]    
    static void Main(string[] args)    
    {    
        //参数字符串:first -o outfile.txt --compile second \errors=errors.txt third fourth --test = "the value" fifth    
       
        CommandArgs objArgs = CommandLine.Parse(args);    
            
        //键值参数列表,得到输出    
        
    //o:outfile.txt    
        
    //compile:second    
        
    //errors:errors.txt    
        
    //test:the value    
        foreach (string str in objArgs.ArgPairs.Keys)    
        {    
            Debug.WriteLine(string.Format("{0}:{1}", str, objArgs.ArgPairs[str]));    
        }    
       
       
        //非键值参数列表:得到first third fourth fifth 共四个字符串    
        foreach (string str in objArgs.Params)    
        {    
            Debug.WriteLine(str);    
        }    
       
        Application.EnableVisualStyles();    
        Application.SetCompatibleTextRenderingDefault(false);    
        Application.Run(new Form1());    

     

    3)输出结果如下所示

    我们给程序输入命令行参数first -o outfile.txt --compile second \errors=errors.txt third fourth --test = "the value" fifth,得到的输出结果如下所示。
    o:outfile.txt    
    compile:second    
    errors:errors.txt    
    test:the value    
    first    
    third    
    fourth    
    fifth  


    4、枚举操作辅助类 EnumHelper。  

    实现效果

    1)本辅助类主要是用来方便实现枚举的各种相关操作。 

    2)枚举操作,涉及字符串和枚举对象互转、获取枚举成员、获取名称和值集合、获取枚举值、枚举描述等操作。 
    3)枚举可以说是一种强类型的对象操作,比起使用古怪字符、或者数值等内容,具有强类型,编译时刻就确定等特点,在实际开发中,我们还可以使用中文枚举来方便实现各种操作。 

    实现代码

    1)辅助类提供的方法接口如下所示: 

    /// <summary>    
    /// 通过字符串获取枚举成员实例    
    /// </summary>    
    /// <typeparam name="T">枚举名,比如Enum1</typeparam>    
    /// <param name="member">枚举成员的常量名或常量值,    
    /// 范例:Enum1枚举有两个成员A=0,B=1,则传入"A"或"0"获取 Enum1.A 枚举类型</param>    
    public static T GetInstance<T>(string member)    
       
    /// <summary>    
    /// 获取枚举成员名称和成员值的键值对集合    
    /// </summary>    
    /// <typeparam name="T">枚举名,比如Enum1</typeparam>    
    public static Dictionary<stringobject> GetMemberKeyValue<T>()    
       
    /// <summary>    
    /// 获取枚举所有成员名称    
    /// </summary>    
    /// <typeparam name="T">枚举名,比如Enum1</typeparam>    
    public static string[] GetMemberNames<T>()    
       
    /// <summary>    
    /// 获取枚举成员的名称    
    /// </summary>    
    /// <typeparam name="T">枚举名,比如Enum1</typeparam>    
    /// <param name="member">枚举成员实例或成员值,    
    /// 范例:Enum1枚举有两个成员A=0,B=1,则传入Enum1.A或0,获取成员名称"A"</param>    
    public static string GetMemberName<T>(object member)    
       
    /// <summary>    
    /// 获取枚举所有成员值    
    /// </summary>    
    /// <typeparam name="T">枚举名,比如Enum1</typeparam>    
    public static Array GetMemberValues<T>()    
       
    /// <summary>    
    /// 获取枚举成员的值    
    /// </summary>    
    /// <typeparam name="T">枚举名,比如Enum1</typeparam>    
    /// <param name="memberName">枚举成员的常量名,    
    /// 范例:Enum1枚举有两个成员A=0,B=1,则传入"A"获取0</param>    
    public static object GetMemberValue<T>(string memberName)    
       
    /// <summary>    
    /// 获取枚举的基础类型    
    /// </summary>    
    /// <param name="enumType">枚举类型</param>    
    public static Type GetUnderlyingType(Type enumType)    
       
    /// <summary>    
    /// 检测枚举是否包含指定成员    
    /// </summary>    
    /// <typeparam name="T">枚举名,比如Enum1</typeparam>    
    /// <param name="member">枚举成员名或成员值</param>    
    public static bool IsDefined<T>(string member)    
       
    /// <summary>    
    /// 返回指定枚举类型的指定值的描述    
    /// </summary>    
    /// <param name="t">枚举类型</param>    
    /// <param name="v">枚举值</param>    
    /// <returns></returns>    
    public static string GetDescription(System.Type t, object v)    
       
    /// <summary>    
    /// 返回指定枚举类型的指定值的名称    
    /// </summary>    
    /// <param name="t">指定枚举类型</param>    
    /// <param name="v">指定值</param>    
    /// <returns></returns>    
    private static string GetName(System.Type t, object v)    
       
    /// <summary>    
    /// 获取枚举类型的对应序号及描述名称    
    /// </summary>    
    /// <param name="t">枚举类型</param>    
    /// <returns></returns>    

    public static SortedList GetStatus(System.Type t)    

    2)辅助类的使用例子代码如下所示 

    private void btnTestEnum_Click(object sender, EventArgs e)    
    {    
        string desc = EnumHelper.GetDescription(typeof(SqlOperator), SqlOperator.Like);    
        MessageUtil.ShowTips(string.Format("SqlOperator.Like:{0}", desc));    
       
        SortedList list = EnumHelper.GetStatus(typeof(SqlOperator));    
        StringBuilder sb = new StringBuilder();    
        foreach (int key in list.Keys)    
        {    
            sb.AppendFormat("key:{0} Value:{1} \r\n", key, list[key]);    
        }    
        MessageUtil.ShowTips(sb.ToString());    
    }   

     

    5、身份证相关操作辅助类 IDCardHelper。  

    实现效果

    1)本辅助类主要是用来方便实现身份证的各种相关操作,验证身份证、15到18位身份证号码转换、提取省份、县市、地区区划、出生年月及判断男女等操作。 

    实现代码

    1)辅助类提供的方法接口如下所示: 

    /// <summary>    
    /// 绑定身份证类别的名称    
    /// </summary>    
    /// <param name="cb">ComboBox控件</param>    
    public static void InitIdType(ComboBox cb)    
       
    /// <summary>    
    /// 获取身份证类别的名称(居民身份证、军官证、士兵证、军官离退休证、境外人员身份证明、外交人员身份证明)    
    /// </summary>    
    /// <returns></returns>    
    public static DataTable CreateIDType()    
       
    /// <summary>    
    /// 验证身份证结果    
    /// </summary>    
    /// <param name="idcard">身份证号码</param>    
    /// <returns>正确的时候返回string.Empty</returns>    
    public static string Validate(string idcard)    
       
    /// <summary>    
    /// 15位身份证明号码转化成18位用来编码    
    /// </summary>    
    /// <param name="idcard">15位的身份证号码</param>    
    /// <returns></returns>    
    public static string IdCard15To18(string idcard)    
       
    /// <summary>    
    /// 获取身份证对应省份的区划    
    /// </summary>    
    /// <param name="id">身份证</param>    
    /// <returns>头两位+4个0</returns>    
    public static string GetProvince(string id)    
       
    /// <summary>    
    /// 获取身份证对应县市的区划    
    /// </summary>    
    /// <param name="id">身份证</param>    
    /// <returns>头4位+2个0</returns>    
    public static string GetCity(string id)    
       
    /// <summary>    
    /// 获取身份证对应地区的区划    
    /// </summary>    
    /// <param name="id">身份证</param>    
    /// <returns>头6位</returns>    
    public static string GetArea(string id)    
       
    /// <summary>    
    /// 根据身份证判断是否男女    
    /// </summary>    
    /// <param name="id">身份证号码</param>    
    /// <returns>返回"男"或者"女"</returns>    
    public static string GetSexName(string id)    
       
    /// <summary>    
    /// 根据身份证获取出生年月    
    /// </summary>    
    /// <param name="id">身份证号码</param>    
    /// <returns>出生年月</returns>    

    public static DateTime GetBirthday(string id)    

    2)辅助类的使用例子代码如下所示 

  • 例子涉及敏感信息,自己测试下即可,呵呵    
 

6、各种输入格式验证辅助类 ValidateUtil。  

实现效果

1)本辅助类主要是用来方便实现各种输入格式验证操作。 

2)格式验证包括各种数字格式、中文检测、身份证、邮件、邮政编码、固定电话、手机、URL地址、IP地址、日期格式、GUID、Base64编码等格式验证。 
3)本辅助类采用各种经过验证的正则表达式进行匹配,具有高效、准确的特点,请放心使用。 

实现代码

1)辅助类提供的方法接口如下所示: 

#region 用户名密码格式    
   
/// <summary>    
/// 返回字符串真实长度, 1个汉字长度为2    
/// </summary>    
/// <returns>字符长度</returns>    
public static int GetStringLength(string stringValue)    
   
/// <summary>    
/// 检测用户名格式是否有效    
/// </summary>    
/// <param name="userName">用户名</param>    
/// <returns></returns>    
public static bool IsValidUserName(string userName)    
   
/// <summary>    
/// 密码有效性    
/// </summary>    
/// <param name="password">密码字符串</param>    
/// <returns></returns>    
public static bool IsValidPassword(string password)   
  
#endregion   
  
#region 数字字符串检查    
   
/// <summary>    
/// int有效性    
/// </summary>    
static public bool IsValidInt(string val)    
   
/// <summary>    
/// 是否数字字符串    
/// </summary>    
/// <param name="inputData">输入字符串</param>    
/// <returns></returns>    
public static bool IsNumeric(string inputData)    
   
/// <summary>    
/// 是否数字字符串    
/// </summary>    
/// <param name="inputData">输入字符串</param>    
/// <returns></returns>    
public static bool IsNumber(string inputData)    
   
/// <summary>    
/// 是否数字字符串 可带正负号    
/// </summary>    
/// <param name="inputData">输入字符串</param>    
/// <returns></returns>    
public static bool IsNumberSign(string inputData)    
   
/// <summary>    
/// 是否是浮点数    
/// </summary>    
/// <param name="inputData">输入字符串</param>    
/// <returns></returns>    
public static bool IsDecimal(string inputData)    
   
/// <summary>    
/// 是否是浮点数 可带正负号    
/// </summary>    
/// <param name="inputData">输入字符串</param>    
/// <returns></returns>    
public static bool IsDecimalSign(string inputData)   
  
#endregion   
  
#region 中文检测    
   
/// <summary>    
/// 检测是否有中文字符    
/// </summary>    
public static bool IsHasCHZN(string inputData)    
   
/// <summary>     
/// 检测含有中文字符串的实际长度     
/// </summary>     
/// <param name="str">字符串</param>     
public static int GetCHZNLength(string inputData)   
  
#endregion   
  
#region 常用格式    
   
/// <summary>    
/// 验证身份证是否合法  15 和  18位两种    
/// </summary>    
/// <param name="idCard">要验证的身份证</param>    
public static bool IsIdCard(string idCard)    
   
/// <summary>    
/// 是否是邮件地址    
/// </summary>    
/// <param name="inputData">输入字符串</param>    
/// <returns></returns>    
public static bool IsEmail(string inputData)    
   
/// <summary>    
/// 邮编有效性    
/// </summary>    
public static bool IsValidZip(string zip)    
   
/// <summary>    
/// 固定电话有效性    
/// </summary>    
public static bool IsValidPhone(string phone)    
   
/// <summary>    
/// 手机有效性    
/// </summary>    
public static bool IsValidMobile(string mobile)    
   
/// <summary>    
/// 电话有效性(固话和手机 )    
/// </summary>    
public static bool IsValidPhoneAndMobile(string number)    
   
/// <summary>    
/// Url有效性    
/// </summary>    
static public bool IsValidURL(string url)    
   
/// <summary>    
/// IP有效性    
/// </summary>    
public static bool IsValidIP(string ip)    
   
/// <summary>    
/// domain 有效性    
/// </summary>    
/// <param name="host">域名</param>    
/// <returns></returns>    
public static bool IsValidDomain(string host)    
   
/// <summary>    
/// 判断是否为base64字符串    
/// </summary>    
public static bool IsBase64String(string str)    
   
/// <summary>    
/// 验证字符串是否是GUID    
/// </summary>    
/// <param name="guid">字符串</param>    
/// <returns></returns>    
public static bool IsGuid(string guid)   
  
#endregion   
  
#region 日期检查    
   
/// <summary>    
/// 判断输入的字符是否为日期    
/// </summary>    
public static bool IsDate(string strValue)    
   
/// <summary>    
/// 判断输入的字符是否为日期,如2004-07-12 14:25|||1900-01-01 00:00|||9999-12-31 23:59    
/// </summary>    
public static bool IsDateHourMinute(string strValue)   
  
#endregion   
  
#region 其他    
   
/// <summary>    
/// 检查字符串最大长度,返回指定长度的串    
/// </summary>    
/// <param name="sqlInput">输入字符串</param>    
/// <param name="maxLength">最大长度</param>    
/// <returns></returns>             
public static string CheckMathLength(string inputData, int maxLength)    
   
/// <summary>    
/// 转换成 HTML code    
/// </summary>    
public static string Encode(string str)    
   
/// <summary>    
///解析html成 普通文本    
/// </summary>    

public static string Decode(string str)  

2)辅助类的使用例子代码如下所示 

string[] qunList = lineString.Split(new char[] { ','';'' ' });    
foreach (string qunNumber in qunList)    
{    
    if (!string.IsNullOrEmpty(qunNumber) && ValidateUtil.IsNumber(qunNumber))    
    {   
        #region 对每个号码进行查询    
        if (!QunDict.ContainsKey(qunNumber))    
        {    
            this.lstItems.Invoke(new MethodInvoker(delegate()    
            {    
                this.lstItems.Items.Add(qunNumber);    
                this.lstItems.Refresh();    
            }));    
   
            QunDict.Add(qunNumber, qunNumber);    
        }    
        else   
        {    
            skipCount++;    
        }    
        #endregion    
    }    

}  

3)辅助类使用例子代码2如下所示 

string src = CRegex.GetImgSrc(img);    
bool isurl = ValidateUtil.IsValidURL(src);    
if (isurl)    
{    
    continue;    

}   

CHM帮助文档持续更新中,统一下载地址是: http://www.iqidi.com/download/commonshelp.rar 

最新公用类库DLL+XML注释文件下载地址是:https://files.cnblogs.com/wuhuacong/WHC.OrderWater.Commons.rar 


主要研究技术:代码生成工具、会员管理系统、客户关系管理软件、病人资料管理软件、Visio二次开发、酒店管理系统、仓库管理系统等共享软件开发
专注于Winform开发框架/混合式开发框架Web开发框架Bootstrap开发框架微信门户开发框架的研究及应用
  转载请注明出处:
撰写人:伍华聪  http://www.iqidi.com 
    
  • 相关阅读:
    PHP学习笔记-session
    [C语言] 插入排序之希尔(shell)排序的特性及实现
    [C语言] 插入排序之二分插入排序的特性及实现
    [C语言] 插入排序之直接插入排序的特性及实现
    [Linux环境编程] TCP通信与多线程编程实现“多人在线聊天室”
    [Linux环境编程] 信号的基本概念与操作函数
    [Linux环境编程] Linux系统命令“rm -rf”的实现
    [Linux环境编程] Linux系统命令“ls -R”的实现
    [Linux环境编程] Linux系统命令“ls -l”的实现
    [C语言] 单向链表的构建以及翻转算法_图文详解(附双向链表构建代码)
  • 原文地址:https://www.cnblogs.com/wuhuacong/p/2274493.html
  • Copyright © 2020-2023  润新知