15位, 18位的身份证号码的验证函数.以及根据身份证取省份,生日,性别

 function checkId(pId){
//检查身份证号码 Go_Rush(阿舜) from http://ashun.cnblogs.com

    var arrVerifyCode = [1,0,"x",9,8,7,6,5,4,3,2];
    
var Wi = [7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2];
    
var Checker = [1,9,8,7,6,5,4,3,2,1,1];

    
if(pId.length != 15 && pId.length != 18)    return "身份证号共有 15 码或18位";

    
var Ai=pId.length==18 pId.substring(0,17)   :   pId.slice(0,6)+"19"+pId.slice(6,16);

    
if (!/^/d+$/.test(Ai))  return "身份证除最后一位外,必须为数字!";

    
var yyyy=Ai.slice(6,10) ,  mm=Ai.slice(10,12)-,  dd=Ai.slice(12,14);

    
var d=new Date(yyyy,mm,dd) ,  now=new Date();
     var year=d.getFullYear() ,  mon=d.getMonth() , day=d.getDate();

    
if (year!=yyyy || mon!=mm || day!=dd || d>now || year<1940return "身份证输入错误!";

    
for(var i=0,ret=0;i<17;i++)  ret+=Ai.charAt(i)*Wi[i];    
    Ai
+=arrVerifyCode[ret %=11];     

    return pId.length ==18 && pId != Ai?"身份证输入错误!":Ai;        
};

最后,根据身份证号码取  省份,生日,性别就很简单了

至于身份证算法的原理,请参阅: 

转载。原文出处:http://www.cnblogs.com/ashun/archive/2007/04/12/idcard-javascript-birthday.html

< script language = " javascript " >
var  id = " 342201570202003 "  

// 根据身份证取 省份,生日,性别  Go_Rush(阿舜) from http://ashun.cnblogs.com/
function  getInfo(id){
    
var  arr = [ null , null , null , null , null , null , null , null , null , null , null , " 北京 " , " 天津 " , " 河北 " , " 山西 " , " 内蒙古 "
             ,
null , null , null , null , null , " 辽宁 " , " 吉林 " , " 黑龙江 " , null , null , null , null , null , null , null , " 上海 "
             ,
" 江苏 " , " 浙江 " , " 安微 " , " 福建 " , " 江西 " , " 山东 " , null , null , null , " 河南 " , " 湖北 " , " 湖南 " , " 广东 " , " 广西 " , " 海南 "
             ,
null , null , null , " 重庆 " , " 四川 " , " 贵州 " , " 云南 " , " 西藏 " , null , null , null , null , null , null , " 陕西 " , " 甘肃 "
             ,
" 青海 " , " 宁夏 " , " *** " , null , null , null , null , null , " 台湾 " , null , null , null , null , null , null , null , null
             ,
null , " 香港 " , " 澳门 " , null , null , null , null , null , null , null , null , " 国外 " ]
    id
= checkId(id)
    
if  (isNaN(id))  return   " 错误的身份证号码 "     
    
var  id = String(id),  prov = arr[id.slice( 0 , 2 )]  ,  sex = id.slice( 14 , 17 ) % 2 " " : " "
    
var  birthday = ( new  Date(id.slice( 6 , 10 ) , id.slice( 10 , 12 ) - 1 , id.slice( 12 , 14 ))).toLocaleDateString() 
    
return  [prov,birthday,sex]  
}

alert(getInfo(id)) 
</ script >
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值