

//为string添加trim()方法,去处字符串前后的空格
function String.prototype.trim() {return this.replace(/(^\s*)|(\s*$)/g,"");}
//为string添加lTrim()方法,去处字符串前的空格
function String.prototype.lTrim(){return this.replace(/(^\s*)/g, "");}
//为string添加rTrim()方法,去处字符串后的空格
function String.prototype.rTrim(){return this.replace(/(\s*$)/g, "");}
//为string添加length2()方法，计算string的长度，中文字符长度为2
function String.prototype.length2(){return this.replace(/[^\x00-\xff]/g,"**").length;}

/*
判断输入是否为空，如果为空返回true，否则返回false
*/
function checkIsEmpty(obj, msg){
	if(isEmpty(obj.value)){
		alert("提示：" + msg + "不能为空!");
		obj.focus();
		return true;
	}
	else{
		return false;
	}
}

/*
判断是否合法数字，如果为空返回true，否则返回false
*/

function checkDecimal(obj, intNum, fracNum, canNull, msg){
	var numStr = obj.value;
	if(canNull && isEmpty(numStr)){
		return true;
	}
	if(!canNull && checkIsEmpty(obj, msg)){
		return false;
	}
	if(!isEmpty(numStr) && !checkIsNumber(obj,msg)){   
		return false;
	}
	
	var idx = numStr.indexOf('.');
	if(idx == -1){
		l = numStr.length;
		if(l > intNum/1){
			alert(msg + "整数部分不能超过" + intNum + "位！");
			obj.focus();
			return false;
		}
	}
	else{
		lInt = numStr.substring(0, idx).length;
		if(lInt > intNum/1){
			alert(msg + "整数部分不能超过" + intNum + "位！");
			obj.focus();
			return false;
		}
		lFrac = numStr.substring(idx + 1, numStr.length).length;
		if(lFrac > fracNum/1){
			alert(msg + "小数部分不能超过" + fracNum + "位！");
			obj.focus();
			return false;
		}
	}
	return true;
}

/*
判断输入是否为数字，如果是返回true，否则返回false
*/
function checkIsNumber(obj, msg){
	if(isNumber(obj.value)){
		return true;
	}
	else{
		alert("提示：" + msg + "应输入数字!");
		obj.focus();
		return false;
	}
}

/*
判断输入是否在规定长度内，如果是返回true，否则返回false
*/
function checkIsTextInRange(obj, iLength, msg){
	if(isTextInRange(obj.value, iLength)){
		return true;	
	}	
	else{
		alert("提示：" + msg + "超长,最多输入" + iLength + "个字符或" + iLength/2 + "个汉字!");
		obj.focus();
		return false;
	}
}


/*
判断输入是否有足够的长度，如果是返回true，否则返回false
*/

function checkHasEnoughLength(obj,iLength,msg){
	if(hasEnoughLength(obj.value,iLength)){
		return true;
	}
	else{
			alert("提示：" + msg + "的长度至少为" + iLength + "个字符!");
			obj.focus();
			return false;
	}
}


/*
判断输入是否为指定的长度，如果是返回true，否则返回false
*/

function checkIsVeryLength(obj,iLength,msg){
	if(isVeryLength(obj.value,iLength)){
		return true;
	}
	else{
			alert("提示：" + msg + "的长度应为" + iLength + "个字符!");
			obj.focus();
			return false;
	}
}


/*
判断输入是否在范围内，lo<=str<=hi返回true
*/
function checkIsNumberInRange(obj, lo, hi, msg){
	if(isNumberInRange(obj.value, lo, hi)){
		return true;	
	}	
	else{
		alert("提示：" + msg + "应在" + lo + "--" + hi + "范围内!");
		obj.focus();
		return false;
	}	
}

/*
判断输入是否为合法的email，如果是返回true，否则返回false
*/
function checkIsValidEmail(obj, msg){
	if(isValidEmail(obj.value)){
		return true;	
	}	
	else{
		alert("提示：" + msg + "应输入有效email地址!");
		obj.focus();
		return false;
	}	
}

/*
判断字符串是否为空，如果为空返回true，否则返回false
*/
function isEmpty(str){
	if(str == null || str.trim() == ""){
		return true;
	}
	else{
		return false;
	}
}

/*
判断字符串是否为数字，如果是返回true，否则返回false
*/
function isNumber(str){
	if(isNaN(str)){
		return false;
	}
	else{
		return true;
	}
}

/*
判断字符串是否在规定长度内，如果是返回true，否则返回false
*/
function isTextInRange(str, iLength){
	if (str.trim().length2() > iLength ){
		return false;
	}
	else{
		return true;
	}
}

/*
判断对象的值是否在规定长度内，如果是返回true，否则返回false，并弹出提示信息;
*/
function isTextInRangeMsg(obj, iLength, msg){
	if (obj.value.rTrim().length2() > iLength ){
		alert("" + msg);
		obj.focus();
		return false;
	}
	else{
		return true;
	}
}

/*
判断输入是否有足够的长度，如果是返回true，否则返回false
*/
function hasEnoughLength(str,iLength){
  if(str.trim().length2()<iLength){
    return false;
  }
	else{
	   return true;
	}
}

/*
判断输入是否为指定的长度，如果是返回true，否则返回false
*/
function isVeryLength(str,iLength){
  if(str.trim().length2()==iLength){
    return true;
  }
	else{
	   return false;
	}
}


/*
判断输入的数字是否在范围内，lo<=str<=hi返回true
*/
function isNumberInRange(str, lo, hi){
	if(isEmpty(str) || !isNumber(str)){
		return false
	}
	var num = parseInt(str, 10)

	if(num < lo || num > hi){
		return false
	}
	else{
		return true
	}
}

/*
判断是否为合法的email，如果是返回true，否则返回false
*/
function isValidEmail(item){
	var etext
	var elen
	var i
	var aa
	etext = item
	if(item.length < 1){
		return false;
	}
	elen = etext.length
	if(elen < 5){
	 	return false;
	}
	i = etext.indexOf("@",0)
	if(i == 0 || i == -1 || i == elen - 1){
		return false;
	}
	else{
		if(etext.indexOf("@",i+1)!=-1){
	  		return false;
	  	}
	}
	if(etext.indexOf("..", i + 1) != -1){
 		return false;
 	}
	i = etext.indexOf(".", 0)
	if(i == 0 || i == -1 || etext.charAt(elen - 1) == '.'){
 		return false;
 	}
	if(etext.charAt(0) == '-' ||  etext.charAt(elen - 1) == '-'){
 		return false;
 	}
	if(etext.charAt(0) == '_' ||  etext.charAt(elen - 1) == '_'){
 		return false;
 	}
	for (i = 0; i <= elen - 1; i++){ 
		aa = etext.charAt(i)
  		if(!((aa == '.') || (aa == '@') || (aa == '-') ||(aa == '_') || (aa >= '0' && aa <= '9') || (aa >= 'a' && aa <= 'z') || (aa >= 'A' && aa <= 'Z'))){
   			return false;
   		}
	}
	return true;
}

/*
判断是否为合法的整数，如果是返回true，否则返回false
*/

function isInt(str){	
	if(str.length == 0) return false;
	var c ;
	for(var i = 0;i<str.length;i++){
		c = str.charAt(i);
		if( isNaN(parseInt(c,10)) ){
		return false;
		}
	}	
	return true;}



function checkIdcard(idcard){
var Errors=new Array(
"true",
"身份证号码位数不对!",
"身份证号码出生日期超出范围或含有非法字符!",
"身份证号码校验错误!",
"身份证地区非法!"
);
var area={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:"新疆",71:"台湾",81:"香港",82:"澳门",91:"国外"}

var idcard,Y,JYM;
var S,M;
var idcard_array = new Array();
idcard_array = idcard.split("");
//地区检验
if(area[parseInt(idcard.substr(0,2))]==null) return Errors[4];
//身份号码位数及格式检验
switch(idcard.length){
case 15:
if ( (parseInt(idcard.substr(6,2))+1900) % 4 == 0 || ((parseInt(idcard.substr(6,2))+1900) % 100 == 0 && (parseInt(idcard.substr(6,2))+1900) % 4 == 0 )){
ereg=/^[1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}$/;//测试出生日期的合法性
} else {
ereg=/^[1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}$/;//测试出生日期的合法性
}
if(ereg.test(idcard)) return Errors[0];
else return Errors[2];
break;
case 18:
//18位身份号码检测
//出生日期的合法性检查 
//闰年月日:((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))
//平年月日:((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))
if ( parseInt(idcard.substr(6,4)) % 4 == 0 || (parseInt(idcard.substr(6,4)) % 100 == 0 && parseInt(idcard.substr(6,4))%4 == 0 )){
ereg=/^[1-9][0-9]{5}19[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}[0-9Xx]$/;//闰年出生日期的合法性正则表达式
} else {
ereg=/^[1-9][0-9]{5}19[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}[0-9Xx]$/;//平年出生日期的合法性正则表达式
}
if(ereg.test(idcard)){//测试出生日期的合法性
//计算校验位
S = (parseInt(idcard_array[0]) + parseInt(idcard_array[10])) * 7
+ (parseInt(idcard_array[1]) + parseInt(idcard_array[11])) * 9
+ (parseInt(idcard_array[2]) + parseInt(idcard_array[12])) * 10
+ (parseInt(idcard_array[3]) + parseInt(idcard_array[13])) * 5
+ (parseInt(idcard_array[4]) + parseInt(idcard_array[14])) * 8
+ (parseInt(idcard_array[5]) + parseInt(idcard_array[15])) * 4
+ (parseInt(idcard_array[6]) + parseInt(idcard_array[16])) * 2
+ parseInt(idcard_array[7]) * 1 
+ parseInt(idcard_array[8]) * 6
+ parseInt(idcard_array[9]) * 3 ;
Y = S % 11;
M = "F";
JYM = "10X98765432";
M = JYM.substr(Y,1);//判断校验位
if(M == idcard_array[17]) return Errors[0]; //检测ID的校验位
else return Errors[3];
}
else return Errors[2];
break;
default:
return Errors[1];
break;
}

}