﻿/*********************************************************************************
* FormCheck.js
* javascript正则表达式检验
**********************************************************************************/

//校验是否全由数字组成
function CheckNUM(data)
{
	var s = data.value;
	if(!s) return true;
	var patrn=/^\d+$/;
	return patrn.exec(s);
	
}

//校验是否为空
function CheckNull(data)
{
	var s = data.value;
	if (s=="") return false;
	return true;
}

//字符串的实际字符长度
function strLen(str)
{
	return str.replace(/[^\x00-\xff]/g,"**").length;
	
}

//校验数据是否在长度范围内
function CheckLength(i1,i2,data)
{
	var s = data.value;	
	if(!s) return true;
	if (strLen(s)>=i1&&strLen(s)<=i2) return true;
	//if (s.length>=i1&&s.length<=i2) return true;
	return false;
}

//校验登录名：只能输入4-20个以字母开头、可带数字、“_”、“.”的字串
function CheckInvalidChar(data)
{
	var s = data.value;
	if(!s) return true;
	var patrn = /['"]+/;
	return !patrn.exec(s);
}

//校验电子邮件
function CheckEmail(data)
{
	var s = data.value;
	if(!s) return true;
	var patrn = /^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/;
	return patrn.exec(s);
}

//校验敏感关键字
function getBadWord()
{
	var arrBadWord = new Array(
									"64精英",
									"DAFA",
									"FALUN",
									"FALUNDAFA",
									"FUCK",
									"八九民运",
									"鲍彤",
									"北京当局",
									"北京政权",
									"财神网",
									"藏独",
									"妈的",
									"陈水扁",
									"陳水扁",
									"持不同政见",
									"赤匪",
									"赤化",
									"达赖",
									"大参考",
									"鸡巴",
									"大陆当局",
									"大陆民运",
									"党棍",
									"党国",
									"动乱",
									"多维",
									"法轮",
									"法轮大法",
									"法轮功",
									"反攻大陆",
									"反共",
									"方励",
									"方励之",
									"高自联",
									"共产党",
									"共党",
									"共匪",
									"共军",
									"狗官",
									"国军",
									"海外民运",
									"汉化",
									"红色恐怖",
									"洪志",
									"胡锦涛",
									"回民暴动",
									"鸡八",
									"鸡巴",
									"纪念六四",
									"江公子",
									"江锦恒",
									"江泽民",
									"江澤民",
									"疆独",
									"军队走私",
									"空中民主墙",
									"李大师",
									"李登辉",
									"李宏志",
									"李宏治",
									"李洪志",
									"李纪周",
									"李禄",
									"李鹏",
									"李旺阳",
									"李月鸟",
									"李志绥",
									"励之",
									"两个中国",
									"林彪",
									"刘刚",
									"刘文胜",
									"刘晓波",
									"六、四",
									"六.四",
									"六四",
									"六四录影带",
									"六四死难者",
									"陆委会",
									"吕秀莲",
									"美国之音",
									"民进党",
									"民运",
									"民运精英",
									"民运领袖",
									"民运人士",
									"民主",
									"民主潮",
									"民主墙",
									"民主运动",
									"民族问题",
									"明慧",
									"明慧网",
									"平反六四",
									"陗P水扁",
									"青天白日旗",
									"青羊宫社科院",
									"人民报",
									"人权",
									"台独",
									"台湾独立",
									"双十节",
									"太子党",
									"天安门录影带",
									"天安门事件",
									"天安门屠杀",
									"天怒",
									"亡党",
									"亡国",
									"王丹",
									"魏京生",
									"吾尔开希",
									"吾尔凯希",
									"西藏独立",
									"西藏人权问题",
									"西单民主墙",
									"项怀城",
									"小参考",
									"学潮",
									"学联",
									"学运",
									"亚洲自由之声",
									"严家其",
									"严家琪",
									"严家祺",
									"一党专政",
									"一九八九",
									"一中一台",
									"以德治国",
									"异见人士",
									"澤民",
									"张京生",
									"赵紫阳",
									"政治反对派",
									"政治犯",
									"中共",
									"暴政",
									"民主党",
									"民主运动",
									"民主之父",
									"人权民运信息中心",
									"人权问题",
									"社会民主党",
									"威胁论",
									"中国之春",
									"中华民国",
									"周小川",
									"周旋",
									"朱毛",
									"朱镕基",
									"转法轮",
									"自慰",
									"宗教压迫",
									"总参",
									"发论", 
									"法？轮",
									"性交",
									"做爱",
									"大麻",
									"毒品",
									"摇头丸",
									"枪支",
									"夹报",
									"三迷药",
									"三唑仑",
									"乖乖药",
									"催情药",
									"迷魂药",
									"致眠",
									"治疗失眠",
									"酣乐欣",
									"李文江",									
									"安眠",
									"迷奸",
									"迷昏药",
									"迷幻",
									"代开发票",
									"办证",
									"无抵押贷款",
									"老虎机",
									"走私",
									"罚没",									
									"监听",
									"窃听",
									"出售手枪",
									"五四手枪",
									"六四手枪",
									"手枪",
									"手抢",
									"假币",									
									"答案",
									"快速",
									"兴奋",
									"按摩",
									"巨大",									
									"抵押",							
									"子弹",
									"作弊",
									"学历证明",
									"毕业证书",									
									"贷-款",
									"开锁",
									"拦截",
									"窃聽",
									"黑车",
									"hei车",								    
							        "谜幻",
									"学历证书",
									"涉外公证",
									"成人三级",
									"司法考试",
									"追踪",
									"监控",
									"定位",
									"各种英语",
									"包你过",
									"考试帮助",
									"建造师",
									"透视",
									"司法",
									"透.视",
									"查觉",
									"安-眠-药",
									"迷香",
									"迷情",
									"屏蔽",
									"无线耳机",
									"隐形耳机",
									"骨导耳机",
									"毕业证",
									"办假",
									"办理真实",
									"办理文凭",
									"台湾货",
									"硬币",
									"面额",
									"假.钞",
									"高等院校",
									"蒙汗",
									"毒素",
									"军用",
									"子dan",
									"猛汗",
									"蒙汗",
									"警备",
									"枪手",
									"四六",
									"通行证",
									"冰毒",
									"麻黄素",
									"麻果",
									"监ting",
									"赌博",
									"警官",
									"病假",
									"考试",
									"造价师",
									"代办",
									"圆臀高翘",
									"口交",
									"出售银行卡",
									"529168275",
									"沮大",
									"违禁",
									"药品",
									"酐乐",
									"幻药",
									"乙醚",
									"考 试",
									"答 案",
									"通 过",
									"考  试",
									"代考",
									"发票",
									"增值税普通发票",
									"乙醚",
									"喷雾",
									"经济师",
									"考生通过",
									"助考服务",
									"普通发票",
									"真票",
									"chsi",
									"专本学历",
									"吴小姐",
									"真实可查",
									"专业办理",
									"15901893081",
									"学位公证",
									"包过",
									"桑塔纳2000∕1.3万",
									"成人社区",
									"妹妹",
									"MM",
									"通/过",																
									"按摸",									
									"银行卡",
									"案替",														
									"T牌",
									"jzmyl",
							 		"舔阴",
							      	"臀翘",
									"小B",
								    "小b",
									"双乳",
									"胸大",
									"添添",
									"搔的很",
									"全套",
									"發票",															
									"兼职女",
									"兼职小姐",
									"职小姐",
									"套牌",                                                                                                   
                                    "票据",
                                    "单据",
                                    "印章",
									"口活绝棒",					
									"代.考",								
									"狙击",
									"步枪",								
									"SM",
									"调教",
									"SM调教",								
									"女王",																						
									"SM",
									"辦證",
									"辦 證",
									"办理公办",
									"成绩单",
									"刻章",									
                                    "证件",
									"答案",								
									"女技",									
									"百度",
									"百 度",
									"Baidu",
									"快照"
								);									
			return arrBadWord;
}

//校验敏感关键字
function checkBadWordByStr(data)
{
	var arrBadWord = getBadWord();
	var re;
	var s = data.value;
	
	for(var i=0;i<arrBadWord.length;i++) 
	{		
		re = new RegExp(arrBadWord[i],"i");  //忽略大小写
		
		//如果存在敏感关键词结束
		if (re.test(s))
		{			
			return false;
		}
	}
	
	return true;
}

//校验普通电话、传真号码：可以“+”开头，除数字外，可含有“-”
function CheckPhone(data)
{
	var s = data.value;
	if(!s) return true;
	var patrn=/(^[0-9]{3,4}\-[0-9]{7,8}\-[0-9]{1,4}$)|(^[0-9]{3,4}\-[0-9]{7,8}$)|(^[0-9]{7,8}$)|(^[0-9]{7,8}\-[0-9]{1,4}$)/;
	return patrn.exec(s);
}

//校验手机号码：必须以数字开头，除数字外，可含有“-”
function CheckMobile(data)
{
	var s = data.value;
	if(!s) return true;
	var patrn=/^((13[0-9])|159)\d{8}$/;
	return patrn.exec(s);
}

//校验移动手机号码：必须以数字开头，除数字外，可含有“-”
function CheckMobile_CMCC(data)
{
	var s = data.value;
	if(!s) return true;
	var patrn=/^((13[5-9])|159)\d{8}$/;
	return patrn.exec(s);
}

//校验联通手机号码：必须以数字开头，除数字外，可含有“-”
function CheckMobile_UNICOM(data)
{
	var s = data.value;
	if(!s) return true;
	var patrn=/^13[0-4]\d{8}$/;
	return patrn.exec(s);
}

//校验邮政编码
function CheckPostCode(data)
{
	var s = data.value;
	if(!s) return true;
	var patrn=/^[1-9]\d{5}$/;
	return patrn.exec(s);
}

//校验搜索关键字
function CheckSearch(data)
{
	var s = data.value;
	if(!s) return true;
	var patrn=/['""`~!@#$%^&*()+=|\\\][\]\{\}:;\'.<>/?]+/;
	return patrn.exec(s);
}

//校验IP地址
function CheckIP(data)
{
	var s = data.value;
	if(!s) return true;
	var patrn=/^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])$/;
	return patrn.exec(s);
}

//校验身份证号码
function CheckIdcard(data)
{
	var s = data.value;
	var Y,JYM;
	var S,M;
	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_array = new Array();
		
	//地区检验
	if(area[parseInt(s.substr(0,2))]==null) return false;
	
	//身份号码位数及格式检验
	if(s.length==15)
	{
		if ( (parseInt(s.substr(6,2))+1900) % 4 == 0 || ((parseInt(s.substr(6,2))+1900) % 100 == 0 && (parseInt(s.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.exec(s)) return false;
		
		//15位转换为18位
		s = s.substring(0,6) + "19" + s.substring(6,15);
		var strJiaoYan  = ["1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2"];
		var intTemp = eval(s.charAt(0)*7+s.charAt(1)*9+s.charAt(2)*10+s.charAt(3)*5+s.charAt(4)*8+s.charAt(5)*4+s.charAt(6)*2+s.charAt(7)*1+s.charAt(8)*6+s.charAt(9)*3+s.charAt(10)*7+s.charAt(11)*9+s.charAt(12)*10+s.charAt(13)*5+s.charAt(14)*8+s.charAt(15)*4+s.charAt(16)*2);
		intTemp %= 11;
		s = s + strJiaoYan[intTemp];
	}
	
	if(s.length==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(s.substr(6,4)) % 4 == 0 || (parseInt(s.substr(6,4)) % 100 == 0 && parseInt(s.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(s)) return false;
		
		//计算校验位
		idcard_array = s.split("");
		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 true; //检测ID的校验位
		}
	}
	
	return false;
}

function CheckRadio(s)
{
	for(var i=0;i<s.length;i++)
	{
		if(s[i].checked)
		{
			return true;
		}
	}
	
	return false;
}

//密码确认
function ConfirmPassword(p1,p2)
{
	return p1.value==p2.value;
}

function CheckData(form)
{
	var iLen = arrCheck.length/3;
	
	for(var i=0;i<iLen;i++)
	{
		var fields = arrCheck[i*3].split(",");
		var fmethod = arrCheck[i*3+1];
		var fmsg = arrCheck[i*3+2];			
		for(var j=0;j<fields.length;j++)
		{
			var field = fields[j];
			var fvalue = "form." + field;
			var rdata = "data";
			
			if(j>0)
			{
				rdata += j;
			}
			fmethod = fmethod.replace(rdata,fvalue);
		}

		var b = eval(fmethod);
		if(!b)
		{
			alert(fmsg);
			var keyField = eval("form." + fields[0]);
			if(keyField.type)
			{
				if(keyField.type!="hidden")
				{
					keyField.focus();
				}
			}
			return false;
		}
	}
	return true;
}
