/*
*身份证校验方法(支持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]; } |
|