function CheckIDCard(strID) {
//验证各位字符是否合法的正则表达式
	ReDigital15 = /\d{15}/;
	ReDigital18 = /\d{17}[0-9xX]{1}/;
//提取日期和校验的正则表达式
	ReDate15 = /\d{6}(\d{6})\d{3}/;
	ReDate18 = /\d{6}(\d{8})\d{3}/;
	//出生日期不能是连续数字
	ReD15 = /^.{6}(\d)\1{5}/;
	switch (strID.length) {
	  case 15:
	  	if (ReD15.test(strID) == true) {
			return "对不起，您输入的身份证号码无效！";
		}
		if (ReDigital15.test(strID) == false) {
			return "对不起，您输入的身份证号码无效！";
		}
		Arr = ReDate15.exec(strID);
		strDate = "19" + Arr[1];
		if (CheckDate(strDate, new Date(1900, 0, 1), new Date()) == false) {
			return "对不起，您输入的身份证号码无效！";
		}
		break;
	  case 18:
		if (ReDigital18.test(strID) == false) {
			return "对不起，您输入的身份证号码无效！";
		}
		Arr = ReDate18.exec(strID);
		strDate = Arr[1];
		if (CheckDate(strDate, new Date(1900, 0, 1), new Date()) == false) {
			return "对不起，您输入的身份证号码无效！";
		}
		if (CheckSum(strID) == false) {
			return "对不起，您输入的身份证号码无效！";
		}
		break;
	  default:
		return "对不起，您输入的身份证号码无效！";
		break;
	}
	return "";
}
//对身份证的校验位进行验证
function CheckSum(strID) {
//debugger;
//18位数字提取正则表达式
	Re18Digital = /(\d{1})(\d{1})(\d{1})(\d{1})(\d{1})(\d{1})(\d{1})(\d{1})(\d{1})(\d{1})(\d{1})(\d{1})(\d{1})(\d{1})(\d{1})(\d{1})(\d{1})([0-9xX]{1})/;
	Arr = Re18Digital.exec(strID);
	var Wi = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
	Sum = 0;
	for (i = 0; i <= 16; i++) {
		Sum += Arr[i + 1] * Wi[i];
	}
	ArrCheckSum = new Array("1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2");
	strCheckSum = ArrCheckSum[Sum % 11];
	if (strCheckSum == Arr[18].toUpperCase()) {
		return true;
	} else {
		return false;
	}
}
//检查在指定范围之内的日期，支持选择框自动生成格式和手动连打格式。返回bool，true表示日期有效，false表示日期无效。
function CheckDate(strDate, DateFrom, DateTo) {
//手动日期验证正则表达式
	ReDigital8 = /\d{8}/;
//自动日期验证正则表达式
	ReAutoDate = /\d{4}-{1}\d{1,2}-\d{1,2}/;
//自动日期提取正则表达式
//ReGetDate = /(d{4})-{1}(d{1,2})-(d{1,2})/;
//debugger;
	if (strDate.indexOf("-") > -1) {
		if (ReAutoDate.test(strDate) == false) {
			return false;
		}
//Arr = ReGetDate.exec( strDate );
		Arr = strDate.split("-");
		strDate = (Arr[0]) + "" + (Arr[1].length < 2 ? "0" : "") + Arr[1] + (Arr[2].length < 2 ? "0" : "") + (Arr[2]);
	}
	if (strDate.length != 8) {
		return false;
	}
	if (ReDigital8.test(strDate) == false) {
		return false;
	}
	MyDate = eval(strDate.replace(/^(\d{4})(\d{2})(\d{2})$/, "new Date($1,$2-1,$3)"));
	strMyDate = MyDate.getFullYear() + (MyDate.getMonth() < 9 ? "0" : "") + (MyDate.getMonth() + 1) + "" + (MyDate.getDate() <= 9 ? "0" : "") + MyDate.getDate();
//日期有效性验证
	if (strMyDate != strDate) {
		return false;
	}
//日期范围验证
	if (MyDate >= DateFrom && MyDate <= DateTo) {
		return true;
	} else {
		return false;
	}
}


