分享

flex身份证验证

 古今文斋 2012-03-02
/*
*身份证校验方法(支持18位)
*17位数字和1位校验码:6位地址码数字(前6位),8位生日数字(第7位到14位),3位出生时间顺序码(15位到17位),1位校验码(第18位数)
*17位数字本体码加权求和公式 S = Sum(Ai * Wi), i = 0, , 16 ,先对前17位数字的权求和;
*Ai:表示第i位置上的身份证号码数字值 Wi:表示第i位置上的加权因子 Wi: 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2;
*计算模 Y = mod(S, 11);
*通过模得到对应的校验码 Y: 0 1 2 3 4 5 6 7 8 9 10 校验码: 1 0 X 9 8 7 6 5 4 3 2
*/
private function isIdCard(ss:String):Boolean{
    var paritybit:Array = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'];
    var power_list:Array = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];
    var s:String = ss.toUpperCase().toString();
    var power:Number = 0;
    for(var i:int=0;i<s.length;i++){
     if(i==s.length-1 && s.charAt(i)=="X"){ 
      break; 
     }
     if(s.charAt(i)<'0' || s.charAt(i)>'9'){
      return false;
     }
     if(i<s.length-1){
      power += Number(s.charAt(i)) * power_list[i];
     }
    }
    var date:Date = new Date();
    var year:Number = Number(s.substring(6,10));
    if(year<1900 || year>date.getFullYear()){
     return false;
    }
    var month:Number = Number(s.substring(10,12));
    if(month<1 || month>12){
     return false;    
    }
    var day:Number = Number(s.substring(12,14));
    if(day<1 || day>31){ 
     return false; 
    }
    return s.charAt(s.length - 1) == paritybit[power % 11];
   }

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约