我要在一个注册页面收集身份证号码,请问应该如何进行验证呢?我用javaEE开发的。。

解决方案 »

  1.   


    /**
     * 是否為中國身分證字號
     * @param id 要被檢查的字串
     * @param year 出生年
     * @param month 出生月
     * @param day 出生日
     * @param gender 性別,0:女性 1:男性
     * @param advCheck 18码身分证是否要检查出生年月日和性别
     * @return true:是中國身分證字號 false:不是中國身分證字號
     */
    public static boolean isCnId(String id, int year, int month, int day, int gender, boolean advCheck) {
    boolean result = false;
    if (id == null) {
    return false;
    } else {
    if (id.length() == 15) {
    if (year > 0 && month > 0 && day > 0) {
    result = advCheckCnId (id, year, month, day, gender);
    }
    } else if (id.length() == 18) {
    if (advCheck) {
    result = advCheckCnId (id, year, month, day, gender);

    if (!result) {
    return result;
    }
    }

    int[] wi = {7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2,1}; 
    // verify digit 
    String[] vi   = {"1","0","X","9","8","7","6","5","4","3","2"}; 
    int[] ai      = new int[17];
    String verify = id.substring(17, 18).toUpperCase(); 

    int remaining = 0; 
    id = id.substring(0, 17); 

    if (!isPositiveInteger(id)) {
    return false;
    } else {
    int sum = 0;
    int k   = 0;
    for (int i = 0; i < 17; i++) { 
    k = Integer.parseInt(id.substring(i, i + 1)); 
        ai[i] = k; 


    for (int i = 0; i < 17; i++) { 
    sum = sum + wi[i] * ai[i]; 

    remaining = sum % 11;

    if (verify.equals(remaining == 2 ?  "X" : vi[remaining])) {
    result = true;
    }
    }
    }
    }
    return result;
    }
      

  2.   

    function IsIdCard(number){
    var date, Ai,Ai1;
    var verify = "10X98765432";
    var verify1 = "10x98765432";
    var Wi = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];
    var area = ['','','','','','','','','','','','北京','天津','河北','山西','内蒙古','','','','','','辽宁','吉林','黑龙江','','','','','','','','上海','江苏','浙江','安微','福建','江西','山东','','','','河南','湖北','湖南','广东','广西','海南','','','','重庆','四川','贵州','云南','西藏','','','','','','','陕西','甘肃','青海','宁夏','新疆','','','','','','台湾','','','','','','','','','','香港','澳门','','','','','','','','','国外'];
    var re = number.match(/^(\d{2})\d{4}(((\d{2})(\d{2})(\d{2})(\d{3}))|((\d{4})(\d{2})(\d{2})(\d{3}[xX\d])))$/i);
    if(re == null) return false;
    if(re[1] >= area.length || area[re[1]] == "") return false;
    if(re[2].length == 12){
    Ai = number.substr(0, 17);
    Ai1 = number.substr(0, 17);
    date = [re[9], re[10], re[11]].join("-");
    }
    else{
    Ai = number.substr(0, 6) + "19" + number.substr(6);
    Ai1 = number.substr(0, 6) + "19" + number.substr(6);
    date = ["19" + re[4], re[5], re[6]].join("-");
    }
    if(!this.IsDate(date, "ymd")) return false;
    var sum = 0;
    var sum1 = 0;
    for(var i = 0;i<=16;i++){
    sum += Ai.charAt(i) * Wi[i];
    sum1 += Ai1.charAt(i) * Wi[i];
    }
    Ai +=  verify.charAt(sum%11);
    Ai1 +=  verify1.charAt(sum1%11);
    return (number.length ==15 || number.length == 18 && (number == Ai||number == Ai1));
    }
      

  3.   

    没有完美的身份证验证 有些不支持后面XY啊什么的 有些长度不对也不行 LZ代码拿回去要拿同事实验下 看看谁的身份证不合格..
      

  4.   

    中间有段验证日期的this.IsDate(date, "ymd") function IsDate(op, formatString){
    return parseDate(op, formatString) != null;
    }
    function parseDate(str, fmtDate, fmtTime) {
    var reg = null; if("dmy" == fmtDate){
    reg = "^(\\d{1,2})([-./])(\\d{1,2})\\2((\\d{4})|(\\d{2}))";
    } else if ("ymd" == fmtDate){
    //alert(fmtDate);
    reg = "^(\\d{1,4})([-])(\\d{1,2})([-])(\\d{1,2})";
    } else {
    reg = "^((\\d{4})|(\\d{2}))([-./])(\\d{1,2})\\4(\\d{1,2})";
    } if(!isNull(fmtTime)) {
    if("hm" == fmtTime) reg += "\\s+(\\d{1,2}):(\\d{1,2})";
    else if("hms" == fmtTime) reg += "\\s+(\\d{1,2}):(\\d{1,2}):(\\d{1,2})";
    else if("hm_s" == fmtTime) reg += "\\s+(\\d{1,2}):(\\d{1,2})(:(\\d{1,2})){0,1}";
    }
    reg += "$"; var d = getDateFields(str.match(new RegExp(reg)), fmtDate); if(d instanceof Array
    && isValidDate(d[0], d[1], d[2]) 
    && isValidTime(d[3], d[4], d[5])) return d; return null;
    }
      

  5.   

    如果用struts,可以用动态验证框架啊。配置文件里,写上对应的正则表达式,我觉得很方便。
      

  6.   

    javascript那一段代码好像用不了啊。
      

  7.   

    那俩位前辈的讨论的文章在哪?
    给俺个url
      

  8.   

    用struts的配置文件里如何写正则表达式呢?最想要这个。
      

  9.   

    我拿struts1.x的动态验证框架(struts2还没用过)。validator-rules.xml中不是有mask这种验证类型嘛。随便弄来的小例子:
      
        <form name="submitForm">  
       <field property="customer.firstName"  
        depends="required,mask,minlength">  
        <arg0 key="submitForm.customer.firstname" />  
        <arg1 name="minlength" key="${var:minlength}"  
         resource="false" />  
        <var>  
         <var-name>mask</var-name>  
         <var-value>^\w+$</var-value>  
        </var>  
        <var>  
         <var-name>minlength</var-name>  
         <var-value>5</var-value>  
        </var>  
       </field>  
       <field property="customer.lastName"  
        depends="required,mask,maxlength">  
        <msg name="mask" key="submitForm.lastname.maskmsg" />  
        <arg0 key="submitForm.customer.lastname" />  
        <arg1 name="maxlength" key="${var:maxlength}"  
         resource="false" />  
        <var>  
         <var-name>mask</var-name>  
         <var-value>^[a-zA-Z]*$</var-value>  
        </var>  
        <var>  
         <var-name>maxlength</var-name>  
         <var-value>10</var-value>  
        </var>  
       </field>  
       <field property="customer.address" depends="required">  
        <arg0 key="submitForm.customer.address" />  
       </field>  
       <field property="customer.city" depends="required,mask">  
        <arg0 key="submitForm.customer.city" />  
        <var>  
         <var-name>mask</var-name>  
         <var-value>^[a-zA-Z]*$</var-value>  
        </var>  
       </field>  
       <field property="customer.state" depends="required,mask">  
        <arg0 key="submitForm.customer.state" />  
        <var>  
         <var-name>mask</var-name>  
         <var-value>^[a-zA-Z]*$</var-value>  
        </var>  
       </field>  
      ...............
      不懂得话还可以和你交流....
      

  10.   

    如果你要做得更安全,建议还是用服务器端的验证。
    动态验证框架是属于服务器端验证。前台发送请求到action之前前进行拦截并去匹配验证规则。当然设置一下,就可以自动为你生成前台的所有js验证代码。
    个人觉得jQuery有一个验证框架jquery.validate是很棒的前台验证工具。如果你做只前台验证,这个再好不过了!它可以响应每个输入的字符立即提示配置好的信息。
    例如:
    // 信息验证
    $(document).ready(function() {     createMajor();
    $("#examForm").validate( {
    rules : { examName : {
    required : true,
    minlength : 3,
    maxlength : 10
    },
    limiteTime : {
    required : true,
    digits : true,
    min : 15,
    max : 200 }, score : {
    required : true,
    number : true,
    min : 10,
    max : 150
    },

    description : {
    required : true,
    minlength : 15 } },
    messages : { examName : {
    required : "请输入试卷名",
    minlength : "试卷名需两个字以上",
    maxlength : "试卷名不能大于5个汉字"
    },
    limiteTime : {
    required : "请输入考试限制时间",
    digits : "请输入数字",
    min : "限制时间必须大于15分钟",
    max : "限制时间必须小于200分钟" },
    score : {
    required : "请输入试卷总分",
    number : "请输入整数",
    min : "总分必须大于10分",
    max : "总分必须小于150分"
    },
    description : {
    required : "请输入试卷描述",
    minlength : "试卷描述不能小于15个字符" } }
    }); });
      

  11.   

    这里有你需要的东西,进来看看吧,和高手交流一下http://www.itkanba.com/bbs/forumdisplay.php?fid=13