private
bool
CheckIDCard_CHS(
string
IDCard)
{
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( ' , ' );
string [] Checker = ( " 1,9,8,7,6,5,4,3,2,1,1 " ).Split( ' , ' );
int intLength = IDCard.Length;
int i = 0 , TotalmulAiWi = 0 ;
int modValue = 0 ;
string strVerifyCode = "" ;
string Ai = "" ;
string BirthDay = "" ;
int intYear = 0 ;
int intMonth = 0 ;
int intDay = 0 ;
if (intLength != 18 )
{
return false ;
}
if (intLength == 18 )
{
Ai = IDCard.Substring( 0 , 17 );
}
else if (intLength == 15 )
{
Ai = IDCard;
Ai = Ai.Substring( 0 , 6 ) + " 19 " + Ai.Substring( 6 , 9 );
}
if ( ! IsNumeric(Ai)) return false ;
intYear = Convert.ToInt32(Ai.Substring( 6 , 4 ));
intMonth = Convert.ToInt32(Ai.Substring( 10 , 2 ));
intDay = Convert.ToInt32(Ai.Substring( 12 , 2 ));
BirthDay = intYear.ToString() + " - " + intMonth.ToString() + " - " + intDay.ToString();
if (IsDateTime(BirthDay))
{
DateTime DateBirthDay = DateTime.Parse(BirthDay);
if (DateBirthDay > DateTime.Now)
{
return false ;
}
int intYearLength = DateBirthDay.Year - DateBirthDay.Year;
if (intYearLength < - 140 )
{
return false ;
}
}
if (intMonth > 12 || intDay > 31 )
{
return false ;
}
for (i = 0 ; i < 17 ; i ++ )
{
TotalmulAiWi = TotalmulAiWi + (Convert.ToInt32(Ai.Substring(i, 1 )) * Convert.ToInt32(Wi[i].ToString()));
}
modValue = TotalmulAiWi % 11 ;
strVerifyCode = arrVarifyCode[modValue].ToString();
Ai = Ai + strVerifyCode;
if (intLength == 18 && IDCard != Ai)
{
return false ;
}
return true ;
}
/// 判断字符串是否可转换为DateTime
/// 要判断的字符串
/// true=可以转换;false=无法转换
private bool IsDateTime( string s)
{
try
{
System.DateTime.Parse(s);
}
catch
{
return false ;
}
return true ;
}
/// 判断字符串是否可以转换为数字
///
/// 要判断的字符串
/// true=可以转换;false=无法转换
private bool IsNumeric( object value)
{
try
{
double i = Convert.ToDouble(value.ToString());
return true ;
}
catch (FormatException)
{
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( ' , ' );
string [] Checker = ( " 1,9,8,7,6,5,4,3,2,1,1 " ).Split( ' , ' );
int intLength = IDCard.Length;
int i = 0 , TotalmulAiWi = 0 ;
int modValue = 0 ;
string strVerifyCode = "" ;
string Ai = "" ;
string BirthDay = "" ;
int intYear = 0 ;
int intMonth = 0 ;
int intDay = 0 ;
if (intLength != 18 )
{
return false ;
}
if (intLength == 18 )
{
Ai = IDCard.Substring( 0 , 17 );
}
else if (intLength == 15 )
{
Ai = IDCard;
Ai = Ai.Substring( 0 , 6 ) + " 19 " + Ai.Substring( 6 , 9 );
}
if ( ! IsNumeric(Ai)) return false ;
intYear = Convert.ToInt32(Ai.Substring( 6 , 4 ));
intMonth = Convert.ToInt32(Ai.Substring( 10 , 2 ));
intDay = Convert.ToInt32(Ai.Substring( 12 , 2 ));
BirthDay = intYear.ToString() + " - " + intMonth.ToString() + " - " + intDay.ToString();
if (IsDateTime(BirthDay))
{
DateTime DateBirthDay = DateTime.Parse(BirthDay);
if (DateBirthDay > DateTime.Now)
{
return false ;
}
int intYearLength = DateBirthDay.Year - DateBirthDay.Year;
if (intYearLength < - 140 )
{
return false ;
}
}
if (intMonth > 12 || intDay > 31 )
{
return false ;
}
for (i = 0 ; i < 17 ; i ++ )
{
TotalmulAiWi = TotalmulAiWi + (Convert.ToInt32(Ai.Substring(i, 1 )) * Convert.ToInt32(Wi[i].ToString()));
}
modValue = TotalmulAiWi % 11 ;
strVerifyCode = arrVarifyCode[modValue].ToString();
Ai = Ai + strVerifyCode;
if (intLength == 18 && IDCard != Ai)
{
return false ;
}
return true ;
}
/// 判断字符串是否可转换为DateTime
/// 要判断的字符串
/// true=可以转换;false=无法转换
private bool IsDateTime( string s)
{
try
{
System.DateTime.Parse(s);
}
catch
{
return false ;
}
return true ;
}
/// 判断字符串是否可以转换为数字
///
/// 要判断的字符串
/// true=可以转换;false=无法转换
private bool IsNumeric( object value)
{
try
{
double i = Convert.ToDouble(value.ToString());
return true ;
}
catch (FormatException)
{
return false ;
}
}