使用JavaScript设计一个可以将身份证号从15位转为18位的网页 
创建一个HTML页面,该页面由一个文本框和一个按钮组成,文本框用于接受用户输入的15位身份证号,点击按钮对输入的15位身份证做有效性验证,将有效的号码进行15位到18位的转换,并显示转换后的18位身份证号码以及该身份证所有者的出生日期和性别; 1.身份证号码长度必须是15位; 2.身份证中代表出身年月日的数字(7~12位)要合法,不能有2月31或99月45日这样的情况;(以上2点要求用RegEx验证) 3.所有不能通过有效性验证的信息必须在文本框后以红色文字显示,并将文本框设为焦点,高亮选中文本框的文字; 
4.对验证的合法的15位身份证号码进行转换,转换规则如下: 
a)在代表年份的第7、8位两位数字前加“19”,将的到的17位号码从末位到首位逐一与2,4,8,5,10,9,7,3,6,1,2,4,8,5,10,9,7相乘后累加求和,得到N,如17位的身份证号码是12345678901234567,则N=7*2+6*4+5*8+4*5+3*10+2*9+1*7+0*3+9*6+8*1+7*2+6*4+5*8+4*5+3*10+2*9+1*7; b)用N对11取余得到R,根据余数R得到身份证的验证码T,规则是:R=0则T=1;R=1则T=0;R=2则T=XR=3则T=9;R=4则T=8;R=5则T=7;以此类推,最后R=10则T=2; c)将验证码T添加到17位身份证号码尾部,得到18位身份证号码 d)在同一页面中用层来以表格形式显示旧的15位身份证号,新的18位身份证号码,持有人的出生年、月、日,持有人性别(原15位身份证号码的最后一位奇数代表男性,偶数代表女性)

解决方案 »

  1.   

    http://blog.csdn.net/jxfdiablo/archive/2006/08/15/1066730.aspx
      

  2.   

    下面是验证日期格式的正则(针对楼主的第2条要求)
    function ChkDateFmt(str){
    return /(^((1[8-9]\d{2})|([2-9]\d{3}))([-\/\._])(10|12|0?[13578])([-\/\._])(3[01]|[12][0-9]|0?[1-9])$)|(^((1[8-9]\d{2})|([2-9]\d{3}))([-\/\._])(11|0?[469])([-\/\._])(30|[12][0-9]|0?[1-9])$)|(^((1[8-9]\d{2})|([2-9]\d{3}))([-\/\._])(0?2)([-\/\._])(2[0-8]|1[0-9]|0?[1-9])$)|(^([2468][048]00)([-\/\._])(0?2)([-\/\._])(29)$)|(^([3579][26]00)([-\/\._])(0?2)([-\/\._])(29)$)|(^([1][89][0][48])([-\/\._])(0?2)([-\/\._])(29)$)|(^([2-9][0-9][0][48])([-\/\._])(0?2)([-\/\._])(29)$)|(^([1][89][2468][048])([-\/\._])(0?2)([-\/\._])(29)$)|(^([2-9][0-9][2468][048])([-\/\._])(0?2)([-\/\._])(29)$)|(^([1][89][13579][26])([-\/\._])(0?2)([-\/\._])(29)$)|(^([2-9][0-9][13579][26])([-\/\._])(0?2)([-\/\._])(29)$)/.test(str);
    }其他的判断应该不难写呀。