产品使用及交流论坛

首页 » 产品使用交流区 » 安装及使用交流 » 验证js问题
acerdcl - 2014/3/25 23:53:33
RT,我想验证注册者的身份信息,网上找了断验证身份证号码的js
<script type="text/javascript">
alert(isIdCardNo("440781197007220512"));
//--身份证号码验证-支持新的带x身份证
function isIdCardNo(num)
{
    var factorArr = new Array(7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2,1);
    var error;
    var varArray = new Array();
    var intValue;
    var lngProduct = 0;
    var intCheckDigit;
    var intStrLen = num.length;
    var idNumber = num;    
    // initialize
    if ((intStrLen != 15) && (intStrLen != 18)) {
        //error = "输入身份证号码长度不对!";
        //alert(error);
        //frmAddUser.txtIDCard.focus();
        return false;
    }    
    // check and set value
    for(i=0;i<intStrLen;i++) {
        varArray = idNumber.charAt(i);
        if ((varArray < '0' || varArray > '9') && (i != 17)) {
            //error = "错误的身份证号码!.";
            //alert(error);
            //frmAddUser.txtIDCard.focus();
            return false;
        } else if (i < 17) {
            varArray = varArray*factorArr;
        }
    }
    if (intStrLen == 18) {
        //check date
        var date8 = idNumber.substring(6,14);
        if (checkDate(date8) == false) {
            //error = "身份证中日期信息不正确!.";
            //alert(error);
            return false;
        }        
        // calculate the sum of the products
        for(i=0;i<17;i++) {
            lngProduct = lngProduct + varArray;
        }        
        // calculate the check digit
        intCheckDigit = 12 - lngProduct % 11;
        switch (intCheckDigit) {
            case 10:
                intCheckDigit = 'X';
                break;
            case 11:
                intCheckDigit = 0;
                break;
            case 12:
                intCheckDigit = 1;
                break;
        }        
        // check last digit
        if (varArray[17].toUpperCase() != intCheckDigit) {
            //error = "身份证效验位错误!...正确为: " + intCheckDigit + ".";
            //alert(error);
            return false;
        }
    }
    else{        //length is 15
        //check date
        var date6 = idNumber.substring(6,12);
        if (checkDate(date6) == false) {
            //alert("身份证日期信息有误!.");
            return false;
        }
    }
    //alert ("Correct.");
    return true;
}

function checkDate(date)
{
    return true;
}
</script>

添加到相应字段更新后,前台输入错误身份证没有提示,正确的也没有通过注册
acerdcl - 2014/3/26 1:23:20
唉弄到凌晨1.30了,也没搞定,想试试在名字文本框中只能输入中文 在js验证中填入 onkeyup="value=value.replace(/[^\u4E00-\u9FA5]/g,'')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\u4E00-\u9FA5]/g,''))"  脚本之家找的代码,也不行啊,xiyou大神来指点下
acerdcl - 2014/3/26 3:44:33
我用网页实现了身份验证代码
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>无标题文档</title>
</head>
<script>
function check(){

//if (j==0) Xb2="男"
//   else Xb2="女"
//var Jmsfzh1=Jmsfzh+i;
var  Xb2="男";
var Jmsfzh1="Jmsfzh1";
alert(trim(document.all(Jmsfzh1).value));    
  
     if (trim(document.all(Jmsfzh1).value)==""){
         alert("请输入人员的居民身份证号!");
         document.all(Jmsfzh1).focus();
         return;
     }
     else
     {
     if (Jmsfzhjy(trim(document.all(Jmsfzh1).value),Xb2)=="error1"){      
          alert("您输入的身份证号不是数字信息!");
          document.all(Jmsfzh1).focus();
          return;
         }
     if (Jmsfzhjy(trim(document.all(Jmsfzh1).value),Xb2)=="error2"){      
          alert("您输入的身份证号位数不正确!");
          document.all(Jmsfzh1).focus();
          return;
         }
      if (Jmsfzhjy(trim(document.all(Jmsfzh1).value),Xb2)=="error3"){
          alert("您输入的身份证号年份不正确!");
          document.all(Jmsfzh1).focus();
          return;
         }
      if (Jmsfzhjy(trim(document.all(Jmsfzh1).value),Xb2)=="error4"){
          alert("您输入的身份证号日期不正确!");
          document.all(Jmsfzh1).focus();
          return;
         }
      if (Jmsfzhjy(trim(document.all(Jmsfzh1).value),Xb2)=="error5"){
          alert("您输入的身份证号性别信息不正确!");
          document.all(Jmsfzh1).focus();
          return;
         }
      }
alert("ok");

}

//判断居民身份证号输入是否正确1218
function Jmsfzhjy(strsfzh,xb)
{
var cd=strsfzh.length;
var year=-1;
var month=-1;
var day=-1;
for (kk=0;kk<cd;kk++){
     if (strsfzh.charAt(kk)>"9" || strsfzh.charAt(kk)<"0"){
         h1="error1";
         return h1;
         }
    }
if (cd!=15&&cd!=18){
     h1="error2";
    return h1
    
   }
if (cd==15){
    s1=strsfzh.substring(0,6);
    s2="19"+strsfzh.substring(6,15)+"0";
    
    strsfzh=s1+s2;
    }
year=issfzhYearValid(parseInt(strsfzh.substring(6,10)));

if (year==-1){
    h1="error3"
    return h1
    }
    month=parseInt(strsfzh.substring(10,12));
    day=isDayValid(year,month,parseInt(strsfzh.substring(12,14)));    
    if (day=="-1"){  
        h1="error4"
    return h1
    }
s=strsfzh.substring(16,17);

if ((s%2==0&&xb=="男")||(s%2==1&&xb=="女")){
      h1="error5"
    return h1
    }
}

//判断居民身份证号年份的合法性
function issfzhYearValid(year){
var retyear=year;
   if (year==0 || year<1900 ||year>2100) retyear=-1;    
  return retyear;
}
//判断日期和月份的合法性
function isDayValid(year,month,day){
var retday=day;
  if (day<1||day>31||month<1||month>12){
    retday=-1;
  }
  else {
    if (day==31&&(month==2||month==4||month==6||month==9||month==11)){
      retday=-1;
    }
    else {
      if(month==2&&day>28&&!(day==29&&year%4==0&&(year%100!==0||year%400==0))){
        retday=-1
      }
    }
}
return retday;
}
function trim(string) {
  var temp = "";
  var temp1="";
  string = '' + string;
  splitstring = string.split(" ");
  for(i = 0; i < splitstring.length; i++)
  temp1 += splitstring;
  splitstring = temp1.split("?");
  for(i = 0; i < splitstring.length; i++)
  temp += splitstring;
  return temp;
  }
</script>
<body>
<input name="Jmsfzh1"  id="Jmsfzh1" type="text" value="" onblur="check()">

</body>
</html>

在PA会员字段里js验证里写onblur="check()",把js加入member.js,为什么不行,数据库身份证字段就是Jmsfzh1
acerdcl - 2014/3/26 4:25:15
还有,xiyou   在http://bbs.pageadmin.net/showtopic-5521.aspx里提到的  onblur="if(this.value=='')alert('请输入内容')"  我写入进去 内容为空时候也不提示输入内容呀
acerdcl - 2014/3/26 9:25:40
大神给看看怎么弄
xiyou - 2014/3/26 9:25:58
进入字段列表,点击一下更新
acerdcl - 2014/3/29 20:20:38
进入字段列表,点击一下更新
xiyou 发表于 2014-3-26 9:25:58
不是更新的问题,自己研究了下解决了,不知道这个算不算是应该修改的问题,在mem_reg.ascx里有段代码,
<script  type='text/javascript'>
 function pa_member_zdycheck(){
 return true;
 }
 </script>
用于自定义js,把网上找的js在后台填进去就不一定有效了,还是自己修改这个文件比较好,后台不如只保留<script type='text/javascript'></script>算了
1
查看完整版本: 验证js问题