客户要求加强前台对×××的验证,可惜之前没有研究过。顶多也就是用个简单的正则完成验证。为了完成这个验证又了解了×××(18位)算法,修修补补完成了相应功能!又学到一点知识哇!我只是个菜鸟!我把代码贴出来希望各位大大们能在指点点!希望在你的评论中我能有点进步!谢谢!

 

 
  
  1. /* 简单×××验证脚本 
  2.      
  3.      *QQ:909507090 
  4.      *var ck=new Qhjsw.IDChecks("×××号码"); 
  5.      *var tip=ck.IDCk(); 
  6.      *tip为一个对象(object)总共存在7个属性 
  7.      *msg 返回提示信息,无论是否通过验证均有此属性。例如:×××格式错误、效验位错误 
  8.      *pass 返回bool值, 无论是否通过验证均有此属性。值为true代表通过,false代表验证失败 
  9.      *idcode ×××号码,验证通过存在 
  10.      *address 地址(只限省份信息),验证通过存在 
  11.      *sextag  性别标识,通过验证存在。0为女,1为男 
  12.      *sex     返回性别为中文。男或女 
  13.      *birthday 返回出生日期 18位×××返回字符格式为YYYY-MM-DD 15位返回格式为YY-MM-DD 例如:1991-01-01(18位)、91-01-01(15位号码) 
  14.      * 
  15.      * 
  16.      *顺序类编码,无法确定,奇数为男,偶数为女    
  17.      *校验码,该位数值可通过前17位计算获得   
  18.      * 18位号码加权因子为(从右到左) Wi = [ 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2,1 ]   
  19.      * 验证位 Y = [ 1, 0,'X' , 9, 8, 7, 6, 5, 4, 3, 2 ]    
  20.      * 校验位计算公式:Y_P = mod( ∑(Ai×Wi),11 )    
  21.     */ 
  22.        var Qhjsw = {}; 
  23.        Qhjsw.IDChecks = function (Code) { 
  24.            if(typeof Code!="string"
  25.            { 
  26.                 throw new Error("×××编号必须是字符串!"); 
  27.            } 
  28.            var city = { 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: "国外 " }; 
  29.            var Tip = {};   //创建一个空对象,此对象用来返回验证结果 
  30.            var IDCode = Code; 
  31.            var code = [];  //创建一个空数组,用来保存被分割的××× 
  32.            var sextable=["女","男"];   //创建数组,保存性别。表驱动 
  33.            var Ck = function (IDCode) { 
  34.                if (!IDCode ||!/(^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$)|(^\d{6}(18|19|20){1}\d{2}(0[1-9]|1[012])(0[1-9]|[12]\d|3[01])\d{3}(\d|X|x)$)/i.test(IDCode)) { 
  35.                    Tip.msg = "×××号格式错误"
  36.                    Tip.pass = false
  37.                } 
  38.                else if (!city[IDCode.substr(0, 2)]) { 
  39.                    Tip.msg = "地址编码错误"
  40.                    Tip.pass = false
  41.                } 
  42.                else if(!_CheckBirthday(IDCode)) 
  43.                { 
  44.                    Tip.msg="×××中出生日期不正确"
  45.                    Tip.pass=false
  46.                } 
  47.                else { 
  48.  
  49.                    if (18 == IDCode.length) { 
  50.                        code = IDCode.split(''); 
  51.                        var factor = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]; 
  52.                        var parity = [1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2]; 
  53.                        var sum = 0; 
  54.                        var ai = 0; 
  55.                        var wi = 0; 
  56.                        if(typeof code[17]=="string"
  57.                        { 
  58.                            code[17]=code[17].toUpperCase(); 
  59.                        } 
  60.                        for (var i = 0; i < 17; i++) { 
  61.                            ai = code[i]; 
  62.                            wi = factor[i]; 
  63.                            sum += ai * wi; 
  64.                        } 
  65.                        var last = parity[sum % 11]; 
  66.                        if (parity[sum % 11] != code[17]) { 
  67.                            Tip.msg = "校验位错误"
  68.                            Tip.pass = false
  69.                        } 
  70.                        else { 
  71.                            Tip.msg = "该×××验证正确"
  72.                            Tip.pass = true
  73.                            Tip.idcode = IDCode; 
  74.                            Tip.address = city[IDCode.substr(0, 2)]; 
  75.                            Tip.sextag=_GetSex(IDCode); 
  76.                            Tip.sex=sextable[Tip.sextag]; 
  77.                            Tip.birthday=_GetBirthday(IDCode); 
  78.                             
  79.                        } 
  80.                    } 
  81.                    else { 
  82.                        Tip.msg = "该×××验证正确"
  83.                        Tip.pass = true
  84.                        Tip.idcode = IDCode; 
  85.                        Tip.address = city[IDCode.substr(0, 2)]; 
  86.                        Tip.sextag=_GetSex(IDCode); 
  87.                        Tip.sex=sextable[Tip.sextag]; 
  88.                        Tip.birthday=_GetBirthday(IDCode); 
  89.                    } 
  90.                } 
  91.            }; 
  92.            this.IDCk = function () { 
  93.                Ck(IDCode); 
  94.                return  Tip; 
  95.            }; 
  96.           function _CheckBirthday(IDCodes) 
  97.           { 
  98.               if(IDCodes.length==18) 
  99.               { 
  100.                  var year =  IDCodes.substring(6,10);    
  101.                  var month = IDCodes.substring(10,12);    
  102.                  var day = IDCodes.substring(12,14);    
  103.                  var temp_date = new Date(year,parseFloat(month)-1,parseFloat(day));    
  104.                  // 这里用getFullYear()获取年份,避免千年虫问题    
  105.                 if(temp_date.getFullYear()!=parseFloat(year)||temp_date.getMonth()!=parseFloat(month)-1    
  106.                      ||temp_date.getDate()!=parseFloat(day)){    
  107.                         return  false;    
  108.                  } 
  109.                  else{    
  110.                         return true;    
  111.                 }    
  112.               } 
  113.               else
  114.                     var year =  IDCodes.substring(6,8);    
  115.                     var month = IDCodes.substring(8,10);    
  116.                     var day = IDCodes.substring(10,12);    
  117.                     var temp_date = new Date(year,parseFloat(month)-1,parseFloat(day));    
  118.                     // 对于老×××中的你年龄则不需考虑千年虫问题而使用getYear()方法    
  119.                    if(temp_date.getYear()!=parseFloat(year)||temp_date.getMonth()!=parseFloat(month)-1    
  120.                      ||temp_date.getDate()!=parseFloat(day)){    
  121.                         return false;    
  122.                     } 
  123.                     else{    
  124.                          return true;    
  125.                      }    
  126.               } 
  127.           } 
  128.           function _GetBirthday(IDCodes){ 
  129.              if(IDCodes.length==18){ 
  130.                  var year =  IDCodes.substring(6,10);    
  131.                  var month = IDCodes.substring(10,12);    
  132.                  var day = IDCodes.substring(12,14); 
  133.                  return year+"-"+month+"-"+day;   
  134.              } 
  135.              else 
  136.              { 
  137.                 var year =  IDCodes.substring(6,8);    
  138.                 var month = IDCodes.substring(8,10);    
  139.                 var day = IDCodes.substring(10,12); 
  140.                 return year+"-"+month+"-"+day; 
  141.                  
  142.              } 
  143.           } 
  144.           function _GetSex(IDCodes){ 
  145.               if(IDCodes.length==18){ 
  146.                 if(IDCodes.substring(14,17)%2==0){    
  147.                      return 0;    
  148.                 } 
  149.                 else{    
  150.                      return 1; 
  151.                 }    
  152.              } 
  153.              else 
  154.              { 
  155.                  if(IDCodes.substring(14,15)%2==0){    
  156.                     return 0;    
  157.                  } 
  158.                  else{    
  159.                    return  1;    
  160.                  }    
  161.              } 
  162.           } 
  163.  
  164.        }; 

注:最近想加强一下JavaScript,大大们有没有一些好书推荐一下!谢谢!

 

本文转载:http://www.cnblogs.com/bluescreen/archive/2012/06/16/2551959.html