胖在一方

出得厅堂入得厨房的胖子

导航

项目中用的一个js函数

Posted on 2006-09-12 16:30  胖在一方  阅读(429)  评论(0)    收藏  举报
<!--
//-------------------------------------------
//
      函数名: ChkSFZMHM(txtObj)           
//
   参数说明: 身份证号码所在的TextBox
//
    函数说明: 检测是否是正确的身份证号码
//
 返回值说明: True  正确的身份证号码
//
     False 错误的身份证号码
//
Creater:Stpangpang  2004-10-13
//
--------------------------------------------
function ChkSFZMHM(txtObj)
{
 
var txt=document.getElementById(txtObj);
 
var str=txt.value;
 
var birthday
  
//判断身份证明号码的长度

 
if (str.length!=15 && str.length!=18)
 
{
  alert('身份证明号码位数不正确,请确认!');
  txt.select();
  txt.focus();
  
return false
 }

 
else if (str.length==15
 
{
  birthday
='19+ str.substr(6,6)
  
if (!ChkData(birthday))
  
{
   alert('身份证明号码中出生日期不正确,请确认');
   txt.select();
   txt.focus();
   
return false;
  }

  
//判断15位是否全部是数字
  if (!/^\d{15}/.test(str))
  
{
   alert('身份证明号码中有非法字符,请确认!')
   txt.select();
   txt.focus();
   
return false;
  }

 }

 
else if (str.length==18)
 
{
  birthday
=str.substr(6,8)
  
if (!ChkData(birthday))
  
{
   alert('身份证明号码中出生日期不正确,请确认');
   txt.select();
   txt.focus();
   
return false;
  }

  
  
var SFZMHM1 =str.substr(0,17);
  
var SFZMHM2=str.substr(17,1);
 
  
//判断前17位是否是数字
  //var reg=new RegExp("[^\d{18}|\d{17]}X$]");
  if (!/^\d{17}/.test(SFZMHM1))
  
{
   alert('身份证明号码中有非法字符,请确认!')
   txt.select();
   txt.focus();
   
return false;
  }

  
//判断身份证明号码的校验位
   var vCode =VerifyCode(str);
 
  
if (SFZMHM2.toUpperCase() != vCode)
  
{
   alert('身份证明号码中的校验位错误
-----应该为 ' + vCode + ' 实际为 ' + SFZMHM2);
   txt.select();
   txt.focus();
   
return false;
  }

 }

 
return true;
}


//-------------------------------------------
//
      函数名: VerifyCode(hm)           
//
   参数说明: 要计算的身份证号码

//    函数说明: 计算传入18位身份证的校验码
//
 返回值说明: 返回校验码

//     Creater: Stpangpang  2004-10-13
//
--------------------------------------------
function VerifyCode(hm)
{
 
var w=new Array();
 
var ll_sum;
 
var ll_i;
 
var ls_check;
    w[
0]=7;
 w[
1]=9;
 w[
2]=10;
 w[
3]=5;
 w[
4]=8;
 w[
5]=4;
 w[
6]=2;
 w[
7]=1;
 w[
8]=6;
 w[
9]=3;
 w[
10]=7;
 w[
11]=9;
 w[
12]=10;
 w[
13]=5;
 w[
14]=8;
 w[
15]=4;
 w[
16]=2;
 ll_sum
=0;
 
for (ll_i=0;ll_i<=16;ll_i++)
 
{   
  ll_sum
=ll_sum+(hm.substr(ll_i,1)-0)*w[ll_i];
 }

    ll_sum
=ll_sum % 11;
    
switch (ll_sum)
 
{
  
case 0 :
   ls_check
="1";
   
break;
  
case 1 :
   ls_check
="0";
   
break;
  
case 2 :
   ls_check
="X";
   
break;
  
case 3 :
   ls_check
="9";
   
break;
  
case 4 :
   ls_check
="8";
   
break;
  
case 5 :
   ls_check
="7";
   
break;
  
case 6 :
   ls_check
="6";
   
break;
  
case 7 :
   ls_check
="5";
   
break;
  
case 8 :
   ls_check
="4";
   
break;
  
case 9 :
   ls_check
="3";
   
break;
  
case 10 :
   ls_check
="2";
   
break;
  }

 
return ls_check  //返回18位身份证的校验码
}

  

function ChkDataPlus(txtObj,allowNull)
{
 
var txt=document.getElementById(txtObj);
 
var str=txt.value;
 
if (allowNull && !ChkData(str))
 
{
  alert('日期有错误,请检查!');
  txt.select();
  txt.focus();
  
return false ;
 }

 
return true;
}


//-------------------------------------------
//
      函数名: ChkData(str)           
//
    函数说明: 判断传入的日期是否是正确的日期格式

//   参数说明: 日期字符串可以是8位或10位

// 返回值说明: True   是正确的日期格式
//
     False  是错误的日期格式
//
     Creater:Stpangpang  2004-10-13
//
--------------------------------------------

function ChkData(str)
{
 
if (str.length==8
 
{
  str
=str.substr(0,4+ '-+ str.substr(4,2+ '-+ str.substr(6,2);
  
//alert(str);
 }

 
var r = str.match(/^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2})$/); 
 
if(r==nullreturn false
 
var d= new Date(r[1], r[3]-1, r[4]); 
 
return (d.getFullYear()==r[1]&&(d.getMonth()+1)==r[3]&&d.getDate()==r[4]);
}



//-------------------------------------------
//
      函数名: Trim(str)           
//
    函数说明: 将字符串前后的空格去除

//    参数说明: str 传入日期格式的字符串
//
 返回值说明: 返回去除空格的字符串
//
     Creater:Stpangpang  2004-10-13
//
--------------------------------------------
function Trim(str)
{
 
return str.replace(/(^\s*)|(\s*$)/g,"");
}




//---------------------------------------------------------------------------
//
    函数名:  ChkLength(str)           
//
    数说明 : 验证输入的字符串是否超过了指定的长度(一个汉字为2个长度)
//
    参数说明 : str 传入日期格式的字符串
//
    length 限制的字符串长度
//
 返回值说明 :True 字符串没有超过指定的长度
//
    False 字符串超过了指定的长度

//    Creater:Stpangpang  2004-10-13
//
--------------------------------------------------------------------------
function ChkLength(str,length)
{
 str
=str.replace(/[^\x00-\xff]/g,"**");
 
if (str.length >length ) return false;
 
return true;
}


//-------------------------------
//
函数名:Enter2Tab()
//
参数  :无
//
说明  :将文本框中的回车键转换成Tab键

//Creater:Stpangpang  2004-10-13
//
-------------------------------
function Enter2Tab()
{
 
if ((window.event.srcElement.type=="text" || window.event.srcElement.type=="select-one" || window.event.srcElement.type=="checkbox"&& window.event.keyCode==13)
 
{
  window.event.keyCode
=9;
 }

}


//-------------------------------
//
函数名:IsNumeric(txt)
//
参数  :txt
//
说明  :检查输入的是否是数字(针对于记分分值)
//
Creater:Stpangpang  2004-10-13
//
-------------------------------
function IsNumeric(txt)
{
 
if (!/^(0|[1-9]\d{0,})$/.test(txt))
  
return false;
 
return true
}


//--------------------------------
//
函数名 Is15Numeric(txt)
//
参数   txt
//
说明   检查输入的是否是合法的15的数字

//Creater Stpangpang 2004/11/15 16:42
//
------------------------------------
function Is15Numeric(txt)
{
 
if(!/^\d{15}/.test(txt))
  
return false;
 
return true;
}


//-------------------------------
//
函数名:CompareDate(txtDate1,txtDate2)
//
参数  :要比较的2个日期字符串
//
说明  :比较2个日期的大小 
//
返回值:  > 0   ====>  txtDate1 > txtDate2
//
   = 0   ====>  txtDate1 = txtDate2
//
   < 0   ====>  txtDate1 < txtDate2
//
Creater:Stpangpang  2004-10-13
//
-------------------------------
function CompareDate(txtDate1,txtDate2)
{
 
try
 
{
  
//2004-08-09 的格式不认,但是 2004/08/09 可以正确识别 如果需要,可以增加将 "."  到 "/" 的转换

  
return(new Date(txtDate1.replace(/-/g,"/")) -new Date(txtDate2.replace(/-/g,"/")));
 }

 
catch(e)
 
{
  
return null;
 }
 
}


//-------------------------------
//
函数名:ChkZJCX(txtZJCX)
//
参数  :准驾车型代码

//说明  :检测是否是标准的准驾车型代码

//返回值: 非法的准驾车型代码 ("" 表示全是标准的准驾车型代码)
//
   
//
Creater:Stpangpang  2004-10-13
//
-------------------------------
function ChkZJCX(txtZJCX)
{
 
return txtZJCX.replace(/A1|A2|A3|B1|B2|C1|C2|C3|C4|D|E|F|M|N|P/g,"");
}


//--------------------------------------------------
//
函数名:ID15To18(zjhm)
//
参数  :15位的证件号码
//
说明  :将15位的身份证号码转换为18位的身份证号码

//返回值: 18位的身份证号码

//
//
----------------------------------------------------
function ID15To18(zjhm)
{
 
var strJiaoYan =new  Array("1""0""X""9""8""7""6""5""4""3""2");
 
var intQuan =new Array(79105842163791058421);
 
var ll_sum=0;
 
var i;
 
var ls_check;
 zjhm 
= zjhm.substring(06+ "19" + zjhm.substring(6);
 
for (i=0;i<=16;i++){
  ll_sum
=ll_sum+(parseFloat(zjhm.substr(i,1)))*intQuan[i];
 }

 ll_sum 
= ll_sum % 11;
 zjhm
=zjhm + strJiaoYan[ll_sum];
 
return zjhm;
}

 
 
//--------------------------------------------------
 //Creater Stpangpang 2004/11/09 13:38
 //函数名:ConvertKeyCode
 //将小键盘的ASCII码转换

 
//
 //--------------------------------------------------
 function ConvertKeyCode(keyCode)
 
{
  
if (keyCode <96 || keyCode>105)
   
return keyCode
  
return (parseInt(keyCode,10)-48)
 
 }



 
//--------------------------------------------------
 //函数名:AutoSelectHPZL
 //Creater Stpangpang 2004/11/09 13:38
 //根据用户键入的数字,自动显示响应的号牌种类

 
//参数说明:SelectHPZL - Select 的名字(一般是号牌种类DropDownList.ClientID)
 //-------------------------------------------------
 var keyDown=0;  //保存击键的次数

 
var saveKey="";  //保存用户键入的值

 
function AutoSelectHPZL(SelectHPZL)
 
{
  
//非数字退出

  
if ((window.event.keyCode<46 || window.event.keyCode>55&& (window.event.keyCode <96 || window.event.keyCode>105))
  
{
   
return false;
  }

  
//keyDown ++ ; //键入的次数增加

  
if(++keyDown>2//如果键入的次数超过2次就退出because Select的Value的值就2位

  
{
   keyDown
=0;
   saveKey
="";
   
return false;
  }

  
if(keyDown==1//保存第一次键入的值

  
{
   saveKey
=String.fromCharCode(ConvertKeyCode(window.event.keyCode));
   
return false;
  }

  
else if(keyDown==2//保存第二次的值

  
{
   saveKey
=saveKey + String.fromCharCode(ConvertKeyCode(window.event.keyCode)); 
   
var sel =document.getElementById(SelectHPZL);
   sel.value
=saveKey;
   keyDown
=0;  //清空键入次数
   saveKey=""//清空保存的键值

  }
  
 }


  
//------------------------------------
//
 Author   : Stpangpang
//
 Created :  2005-08-29
//
 Purpose : 检测身份证明号码
//
 ReturnValue : 返回错误信息
//
-------------------------------------
function CheckSFZMHM_v2(txtSFZMHM)
{
 
//如果是15位
 if(txtSFZMHM.length==15)
 
{
  
//先判断是否是15位数字
  var re=/[0-9]/g;
  
var s;
  s
=txtSFZMHM.replace(re,"")
  
if(s!="")
  
{
   
return '身份证明号码中含有非法字符' + s ;
  }

  
//判断15位身份证明号码的日期是否正确
  var b = '19+ txtSFZMHM.substr(6,6)
  
if (!ChkData(b))
  
{
   
return "身份证明号码中日期错误";
  }

  
return "" ;
 
 }

 
//如果是18位的证明号码
 else if(txtSFZMHM.length==18)
 
{
  
//先判断前17位身份证明号码是否为数字
  var re=/[0-9]/g;
  
var s;
  s
=txtSFZMHM.substr(0,17).replace(re,"")
  
if(s!="")
  
{
   
return '身份证明号码中含有非法字符' + s ; 
  }

  
//判断日期是否正确
  var b2=txtSFZMHM.substr(6,8);
  
if (!ChkData(b2))
  
{
   
return "身份证明号码中日期错误";
  }

  
//判断身份证明号码的校验位
  var SFZMHM2=txtSFZMHM.substr(17,1);
  
var vCode =VerifyCode(txtSFZMHM.substr(0,17));
  
if (SFZMHM2.toUpperCase() != vCode)
  
{
   
return '身份证明号码中的校验位错误-----应该为 ' + vCode + ' 实际为 ' + SFZMHM2 ;
  }

  
return "" ;
 }

 
else
 
{
  
return "身份证明号码位数不正确,应该为15位或者18位,实际为长度为" + txtSFZMHM.length + '位';
 }

}

//-->