厚積薄發(fā),豐富的公用類庫積累,助你高效進行系統(tǒng)開發(fā)(9)----各種常用輔助類

俗話說,一個好漢十個幫,眾人拾柴火焰高等都說明一個道理,有更多的資源,更豐富的積累,都是助你走向成功,走向頂峰的推動力。
本篇的公用類庫的介紹主題是程序開發(fā)中常用到的各種格式轉(zhuǎn)換或者數(shù)據(jù)驗證的輔助類,內(nèi)容范圍可能比較廣泛,包括XML操作、序列化及反序列化操作、命令行解析,枚舉對象操作,數(shù)據(jù)格式驗證等等,不過都是不可多得、好用的輔助類。本篇繼續(xù)繼續(xù)整理優(yōu)化已有的共用類庫,并繼續(xù)發(fā)表隨筆介紹公用類庫的接口方法以及詳細使用操作,力求給自己繼續(xù)優(yōu)化,積攢更豐富的公用類庫資源,加深了解的同時,也給大家展現(xiàn)公用類庫好的方面。
**1、序列化、反序列化、節(jié)點等操作類輔助類 XmlHelper。 **
實現(xiàn)效果
1)本輔助類主要是用來方便實現(xiàn)XML序列化、反序列化、節(jié)點等操作。
2)序列化是指一個對象的實例可以被保存,保存成一個二進制串或者XML等格式字符串。反序列化這是從這些內(nèi)容中還原為一個對象實例的操作。
3)要實現(xiàn)對象的序列化,首先要保證該對象可以序列化。而且,序列化只是將對象的屬性進行有效的保存,對于對象的一些方法則無法實現(xiàn)序列化的。實現(xiàn)一個類可序列化的最簡便的方法就是增加Serializable屬性標(biāo)記類。
4)DOM(文檔對象模型)把層次中的每一個對象都稱之為節(jié)點(NODE),以HTML超文本標(biāo)記語言為例:整個文檔的一個根就是<html>,在DOM中可以使用
document.documentElement來訪問它,它就是整個節(jié)點樹的根節(jié)點(ROOT)。

實現(xiàn)代碼
1)輔助類提供的方法接口如下所示:

/// <summary>    
/// 構(gòu)造函數(shù)    
/// </summary>    
/// <param name="XmlFile">XML文件路徑</param>    
public XmlHelper(string XmlFile)   
  
#region 靜態(tài)方法    
   
/// <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>    
/// 獲取指定節(jié)點下面的XML子節(jié)點    
/// </summary>    
/// <param name="XmlPathNode">XML節(jié)點</param>    
/// <returns></returns>    
public XmlNodeList Read(string XmlPathNode)    
   
/// <summary>    
/// 讀取節(jié)點屬性內(nèi)容    
/// </summary>    
/// <param name="XmlPathNode">XML節(jié)點</param>    
/// <param name="Attrib">節(jié)點屬性</param>    
/// <returns></returns>    
public string Read(string XmlPathNode, string Attrib)    
   
/// <summary>    
/// 獲取元素節(jié)點對象    
/// </summary>    
/// <param name="XmlPathNode">XML節(jié)點</param>    
/// <param name="elementName">元素節(jié)點名稱</param>    
/// <returns></returns>    
public XmlElement GetElement(string XmlPathNode, string elementName)    
   
/// <summary>    
/// 獲取元素節(jié)點的值    
/// </summary>    
/// <param name="XmlPathNode">XML節(jié)點</param>    
/// <param name="elementName">元素節(jié)點名稱</param>    
/// <returns></returns>    
public string GetElementData(string XmlPathNode, string elementName)    
   
/// <summary>    
/// 獲取節(jié)點下的DataSet    
/// </summary>    
/// <param name="XmlPathNode">XML節(jié)點</param>    
/// <returns></returns>    
public DataSet GetData(string XmlPathNode)    
   
/// <summary>    
/// 替換某節(jié)點的內(nèi)容    
/// </summary>    
/// <param name="XmlPathNode">XML節(jié)點</param>    
/// <param name="Content">節(jié)點內(nèi)容</param>    
public void Replace(string XmlPathNode, string Content)    
   
/// <summary>    
/// 刪除節(jié)點    
/// </summary>    
/// <param name="Node">節(jié)點</param>    
public void Delete(string Node)    
   
/// <summary>    
/// 插入一節(jié)點和此節(jié)點的一子節(jié)點    
/// </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>    
/// 插入一個節(jié)點帶一個屬性     
/// </summary>    
/// <param name="MainNode">指定的XML節(jié)點</param>    
/// <param name="Element">元素名稱</param>    
/// <param name="Attrib">屬性名稱</param>    
/// <param name="AttribContent">屬性值</param>    
/// <param name="Content">內(nèi)容</param>    
public void InsertElement(string MainNode, string Element, string Attrib, string AttribContent, string Content)    
   
/// <summary>    
/// 插入XML元素    
/// </summary>    
/// <param name="MainNode">指定的XML節(jié)點</param>    
/// <param name="Element">元素名稱</param>    
/// <param name="Content">內(nèi)容</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操作節(jié)點的例子代碼如下所示。

//bookstore.xml文件內(nèi)容    
/*   
<?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。 **
實現(xiàn)效果
1)本輔助類主要是用來方便實現(xiàn)序列化合反序列化操作。
2)序列化是指一個對象的實例可以被保存,保存成一個二進制串或者XML等格式字符串。反序列化這是從這些內(nèi)容中還原為一個對象實例的操作。
本序列化和反序列化操作,提供二進制、XML格式、Soap格式等多種方式的操作,方便對對象實例進行各種序列化操作或者對各種格式文件的反序列化操作。

實現(xiàn)代碼
1)輔助類提供的方法接口如下所示:

#region 各種格式的序列化操作    
/// <summary>    
/// 序列化對象到二進制字節(jié)數(shù)組    
/// </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>    
/// 序列號對象到文件中,創(chuàng)建一個新文件    
/// </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協(xié)議字符串中反序列化到具體的對象    
/// </summary>    
/// <param name="type">對象的類型</param>    
/// <param name="s">Soap協(xié)議字符串</param>    
/// <returns></returns>    
public static object DeserializeFromSoap(Type type, string s)    
   
/// <summary>    
/// 從指定的二進制字節(jié)數(shù)組中反序列化到具體的對象    
/// </summary>    
/// <param name="type">對象的類型</param>    
/// <param name="bytes">二進制字節(jié)數(shù)組</param>    
/// <returns></returns>    
public static object DeserializeFromBinary(Type type, byte[] bytes)    
   
/// <summary>    
/// 從指定的文件總,以二進制字節(jié)數(shù)組中反序列化到具體的對象    
/// </summary>    
/// <param name="type">對象的類型</param>    
/// <param name="bytes">二進制字節(jié)數(shù)組存儲的文件</param>    
/// <returns></returns>    
public static object DeserializeFromBinary(Type type, string path)    
   
/// <summary>    
/// 獲取對象的字節(jié)數(shù)組大小    
/// </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、實現(xiàn)命令行解析的常用操作的輔助類 CommandLine。 **
實現(xiàn)效果
1)本輔助類主要是用來方便實現(xiàn)命令行解析的常用操作,命令行的解析在很多情況下是非常必要的,如自動并帶參數(shù)啟動的操作等。
2)命令行參數(shù)。這包括兩個列表,一個是參數(shù)對,一個是獨立的參數(shù)。
3)參數(shù)是定義為鍵/值對。參數(shù)鍵必須以'-', '--'或者''開始,在參數(shù)和值之間必須有一個空格或者字符'='。多余的空格將被忽略。參數(shù)后面必須跟著一個值,如果沒有指定值,那么字符串'true'將被指定。如果值有空格,必須使用雙引號來包含字符,否則字符不能被正確解析。

實現(xiàn)代碼
1)輔助類提供的方法接口如下所示:

/// <summary>    
/// 解析傳遞的命令行參數(shù),并返回結(jié)果到一個CommandArgs對象。    
/// 假設(shè)命令行格式: 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">命令行參數(shù)數(shù)組</param>    
/// <returns>包含轉(zhuǎn)換后的命令行對象CommandArgs</returns>   
public static CommandArgs Parse(string[] args)  
/// <summary>    
/// 包含解析的命令行參數(shù)。這包括兩個列表,一個是參數(shù)對,一個是獨立的參數(shù)。    
/// </summary>    
public class CommandArgs    
{    
    /// <summary>    
    /// 返回參數(shù)/參數(shù)值的鍵值字典    
    /// </summary>    
    public Dictionary<string, string> ArgPairs    
   
    /// <summary>    
    /// 返回獨立的參數(shù)列表    
    /// </summary>    
    public List<string> Params    
}   

2)輔助類的使用例子代碼如下所示

/// <summary>    
/// 應(yīng)用程序的主入口點。    
/// </summary>    
[STAThread]    
static void Main(string[] args)    
{    
    //參數(shù)字符串:first -o outfile.txt --compile second \errors=errors.txt third fourth --test = "the value" fifth    
   
    CommandArgs objArgs = CommandLine.Parse(args);    
        
    //鍵值參數(shù)列表,得到輸出    
    //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]));    
    }    
   
   
    //非鍵值參數(shù)列表:得到first third fourth fifth 共四個字符串    
    foreach (string str in objArgs.Params)    
    {    
        Debug.WriteLine(str);    
    }    
   
    Application.EnableVisualStyles();    
    Application.SetCompatibleTextRenderingDefault(false);    
    Application.Run(new Form1());    
} 

3)輸出結(jié)果如下所示

我們給程序輸入命令行參數(shù)first -o outfile.txt --compile second \errors=errors.txt third fourth --test = "the value" fifth,得到的輸出結(jié)果如下所示。

o:outfile.txt
compile:second
errors:errors.txt
test:the value
first
third
fourth
fifth

**4、枚舉操作輔助類 EnumHelper。 **
實現(xiàn)效果
1)本輔助類主要是用來方便實現(xiàn)枚舉的各種相關(guān)操作。
2)枚舉操作,涉及字符串和枚舉對象互轉(zhuǎn)、獲取枚舉成員、獲取名稱和值集合、獲取枚舉值、枚舉描述等操作。
3)枚舉可以說是一種強類型的對象操作,比起使用古怪字符、或者數(shù)值等內(nèi)容,具有強類型,編譯時刻就確定等特點,在實際開發(fā)中,我們還可以使用中文枚舉來方便實現(xiàn)各種操作。

實現(xiàn)代碼
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<string, object> 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>    
/// 獲取枚舉的基礎(chǔ)類型    
/// </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>    
/// 獲取枚舉類型的對應(yīng)序號及描述名稱    
/// </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、身份證相關(guān)操作輔助類 IDCardHelper。 **
實現(xiàn)效果
1)本輔助類主要是用來方便實現(xiàn)身份證的各種相關(guān)操作,驗證身份證、15到18位身份證號碼轉(zhuǎn)換、提取省份、縣市、地區(qū)區(qū)劃、出生年月及判斷男女等操作。
實現(xiàn)代碼
1)輔助類提供的方法接口如下所示:

/// <summary>    
/// 綁定身份證類別的名稱    
/// </summary>    
/// <param name="cb">ComboBox控件</param>    
public static void InitIdType(ComboBox cb)    
   
/// <summary>    
/// 獲取身份證類別的名稱(居民身份證、軍官證、士兵證、軍官離退休證、境外人員身份證明、外交人員身份證明)    
/// </summary>    
/// <returns></returns>    
public static DataTable CreateIDType()    
   
/// <summary>    
/// 驗證身份證結(jié)果    
/// </summary>    
/// <param name="idcard">身份證號碼</param>    
/// <returns>正確的時候返回string.Empty</returns>    
public static string Validate(string idcard)    
   
/// <summary>    
/// 15位身份證明號碼轉(zhuǎn)化成18位用來編碼    
/// </summary>    
/// <param name="idcard">15位的身份證號碼</param>    
/// <returns></returns>    
public static string IdCard15To18(string idcard)    
   
/// <summary>    
/// 獲取身份證對應(yīng)省份的區(qū)劃    
/// </summary>    
/// <param name="id">身份證</param>    
/// <returns>頭兩位+4個0</returns>    
public static string GetProvince(string id)    
   
/// <summary>    
/// 獲取身份證對應(yīng)縣市的區(qū)劃    
/// </summary>    
/// <param name="id">身份證</param>    
/// <returns>頭4位+2個0</returns>    
public static string GetCity(string id)    
   
/// <summary>    
/// 獲取身份證對應(yīng)地區(qū)的區(qū)劃    
/// </summary>    
/// <param name="id">身份證</param>    
/// <returns>頭6位</returns>    
public static string GetArea(string id)    
   
/// <summary>    
/// 根據(jù)身份證判斷是否男女    
/// </summary>    
/// <param name="id">身份證號碼</param>    
/// <returns>返回"男"或者"女"</returns>    
public static string GetSexName(string id)    
   
/// <summary>    
/// 根據(jù)身份證獲取出生年月    
/// </summary>    
/// <param name="id">身份證號碼</param>    
/// <returns>出生年月</returns>    
public static DateTime GetBirthday(string id)

2)輔助類的使用例子代碼如下所示
例子涉及敏感信息,自己測試下即可,呵呵

**6、各種輸入格式驗證輔助類 ValidateUtil。 **
實現(xiàn)效果
1)本輔助類主要是用來方便實現(xiàn)各種輸入格式驗證操作。
2)格式驗證包括各種數(shù)字格式、中文檢測、身份證、郵件、郵政編碼、固定電話、手機、URL地址、IP地址、日期格式、GUID、Base64編碼等格式驗證。
3)本輔助類采用各種經(jīng)過驗證的正則表達式進行匹配,具有高效、準(zhǔn)確的特點,請放心使用。

實現(xiàn)代碼
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 數(shù)字字符串檢查    
   
/// <summary>    
/// int有效性    
/// </summary>    
static public bool IsValidInt(string val)    
   
/// <summary>    
/// 是否數(shù)字字符串    
/// </summary>    
/// <param name="inputData">輸入字符串</param>    
/// <returns></returns>    
public static bool IsNumeric(string inputData)    
   
/// <summary>    
/// 是否數(shù)字字符串    
/// </summary>    
/// <param name="inputData">輸入字符串</param>    
/// <returns></returns>    
public static bool IsNumber(string inputData)    
   
/// <summary>    
/// 是否數(shù)字字符串 可帶正負號    
/// </summary>    
/// <param name="inputData">輸入字符串</param>    
/// <returns></returns>    
public static bool IsNumberSign(string inputData)    
   
/// <summary>    
/// 是否是浮點數(shù)    
/// </summary>    
/// <param name="inputData">輸入字符串</param>    
/// <returns></returns>    
public static bool IsDecimal(string inputData)    
   
/// <summary>    
/// 是否是浮點數(shù) 可帶正負號    
/// </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>    
/// 轉(zhuǎn)換成 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幫助文檔持續(xù)更新中,統(tǒng)一下載地址是: http://www.iqidi.com/download/commonshelp.rar
公用類庫DLL+XML注釋文件下載地址是:http://files.cnblogs.com/wuhuacong/WHC.OrderWater.Commons.rar

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容