最近,在一個項目中想判斷輸入的身份證號是否正確,則自己編寫了一個用于判斷身份證號是否正確的方法,用于判斷用戶輸入的身份證號是否合法。因為當時項目比較急,寫的方法也比較潦草,也沒有進行優化,在使用過程中還未發現有錯誤。
這個方法能夠判斷15位的身份證號和18位的身份證號。
/// <summary>
/// 判斷字符串是否為身份證號
/// </summary>
/// <param name="strCardCode">輸入的字符串</param>
/// <returns>bool:是否為身份證號</returns>
public static bool IsCardCode(string strCardCode)
{
bool isRight = true;
if (strCardCode.Length != 18 && strCardCode.Length != 15)
return false;
else if (strCardCode.Length == 15)
{
try
{
Convert.ToInt64(strCardCode);
}
catch
{
return false;
}
}
else if (strCardCode.Length == 18)
{
string[] prov ={"11","12","13","14","15","21","22","23","31","32","33","34","35","36","37","41","42","43","44","45","46","50",
"51","52","53","54","61","62","63","64","65","81","82"};
string s1 = strCardCode.Substring(0, 2);
string s2 = strCardCode.Substring(0, 17);
string s3 = strCardCode.Substring(6, 8);
string s4 = s2.Substring(16, 1);
try
{
Convert.ToInt64(s2);
}
catch
{
return false;
}
int iPos = 0;
for (iPos = 0; iPos < prov.Length; iPos++)
{
if (prov[iPos] == s1)
break;
}
if (iPos >= prov.Length)
{
return false;
}
if (Convert.ToInt32(s3.Substring(0, 4)) < 1910 || Convert.ToInt32(s3.Substring(0, 4)) > (DateTime.Now.Year - 10))
{
return false;
}
if (Convert.ToInt32(s3.Substring(4, 4).Substring(0, 2)) == 0 || Convert.ToInt32(s3.Substring(4, 4).Substring(0, 2)) > 12)
{
return false;
}
int iTmp = Convert.ToInt32(s3.Substring(4, 4).Substring(2, 2));
if (iTmp == 0 || iTmp > 31)
{
return false;
}
if (strCardCode.Substring(17, 1).ToUpper() != "X")
{
try
{
Convert.ToInt32(strCardCode.Substring(17, 1));
}
catch
{
return false;
}
}
}
return isRight;
}
注意:由于項目的特殊性,這個方法將1910年之前出生的以及小于10歲的身份證號視為非法號碼,你可以根據需要進行修改。
新聞熱點
疑難解答