怎样检验身份号码的正确性?

wenxiuyun 2004-08-06 12:43:05
怎样检验身份号码的正确性?比如说15位或是18位的,还有就是每个地区的区别不同
...全文
114 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
meizz 2004-08-06
  • 打赏
  • 举报
回复
转自秋水的代码:
<script language=javascript>
var aCity =
{
'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' : "国外"
}

function cidInfo(sId){
var iSum=0
var info=""
if(!/^\d{17}(\d|x)$/i.test(sId))return false;
sId=sId.replace(/x$/i,"a");
if(aCity[parseInt(sId.substr(0,2))]==null)return "Error:非法地区";
sBirthday=sId.substr(6,4)+"-"+Number(sId.substr(10,2))+"-"+Number(sId.substr(12,2));
var d=new Date(sBirthday.replace(/-/g,"/"))
if(sBirthday!=(d.getFullYear()+"-"+ (d.getMonth()+1) + "-" + d.getDate()))return "Error:非法生日";
for(var i = 17;i>=0;i --) iSum += (Math.pow(2,i) % 11) * parseInt(sId.charAt(17 - i),11)
if(iSum%11!=1)return "Error:非法证号";
return aCity[parseInt(sId.substr(0,2))]+","+sBirthday+","+(sId.substr(16,1)%2?"男":"女")
}

document.write(cidInfo("380524198002300016"),"<br/>");
document.write(cidInfo("340524198002300019"),"<br/>")
document.write(cidInfo("340524197711111111"),"<br/>")
document.write(cidInfo("34052419800101001x"),"<br/>");
document.write(cidInfo("220283198011200331"),"<br/>");
</script>
BubbleInDiamond 2004-08-06
  • 打赏
  • 举报
回复
先去查一下每个地区的身份证号的前缀(省+市+县+生日(8位或者6位)),再考虑怎么判断吧

87,991

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧