//函数功能:15位身份证号码将被转换成标准的18位,18号码将对其进行做校验位检查,其他输入均返回空字串
function validateId(sId){
var cTable = new Array('1','0','x','9','8','7','6','5','4','3','2')
var iSum = 0
if (15 == sId.length){
sId = sId.substr(0,6) + 19 + sId.substr(6) + "0"
}
if(18 != sId.length){
return ""
}
for(var i = 17;i > 0;i --){
iSum += (Math.pow(2,i) % 11) * parseInt(sId.charAt(17 - i),10)
}
return sId.substr(0,sId.length - 1) + cTable[iSum % 11]
}
function validateId(sId){
var cTable = new Array('1','0','x','9','8','7','6','5','4','3','2')
var iSum = 0
if (15 == sId.length){
sId = sId.substr(0,6) + 19 + sId.substr(6) + "0"
}
if(18 != sId.length){
return ""
}
for(var i = 17;i > 0;i --){
iSum += (Math.pow(2,i) % 11) * parseInt(sId.charAt(17 - i),10)
}
return sId.substr(0,sId.length - 1) + cTable[iSum % 11]
}
解决方案 »
- jquery each问题
- 怎样通过赋值的方式把一段文字添加到xheditor的编辑框中??
- 总节点过百万,单独一个节点下子节点过万,目录树构建问题。
- 一个XPATH问题 ▲▲ 如何选择不含某属性的节点?
- 请教一个高难度技术问题!请各位大虾赐教!
- 怎样获取1-100的一个随机整数?
- 关于javascript层的问题
- 在网页中是否可以通过按钮,指定src显示任意页面。
- outlook调用问题(wanghr100(灰豆宝宝.net),还有其他的高手能帮帮我吗?)
- 如何做到单击一个链向*.mp3的链接就打开winamp来播放,和单击rm打开realplayer?
- 请问哪里提供javascript例子源代码?
- 请问这样做到一个框架,点击左窗口的连接,右窗口里的文本框里显示“你点击了按钮”
包括校验码在内的位置序号;
ai----表示第i位置上的号码字符值;
Wi----示第i位置上的加权因子,
其数值依据公司WI=2(n-1)(mod 11)计算得出。i 18 17 16 15
14 13 12 11
10 9 8 7 6
5 4 3 2 1
ai 3 4 0 5
2 4 1 9
8 0 0 1 0
1 0 0 1 a1
Wi 7 9 10 5
8 4 2 1 6
3 7 9 10
5 8 4 2 1
ai×Wi 21 36 0
25 16 16 2 9
48 0 0 9
0 5 0 0 2 a1
根据公式(1)进行计算:∑(ai×Wi) =(21+36+0+25+16+16+2+
9+48++0+0+9+0+5+0+0+2) = 189189 ÷ 11 = 17 + 2/11∑(ai×Wi)(mod 11) = 2 然后根据计算的结果,从下面的表中查出相应的校验码,
其中X表示计算结果为10:∑(ai×WI)(mod 11) 0 1 2 3 4
5 6 7 8 9 10
校验码字符值ai 1 0 X 9 8 7
6 5 4 3 2---- 根据上表,查出计算结果为2的校验码为所以该人员的公民身份号码应该为34052419800101001X。
function validateId(sId){
var iSum = 0
sId=sId.replace(/x$/i,"a");
if(18!=sId.length) return false
for(var i = 17;i>=0;i --) iSum += (Math.pow(2,i) % 11) * parseInt(sId.charAt(17 - i),16)
return iSum%11==1
}document.write(validateId("34052419800101001X"));
</script>
天津 12 黑龙江 23 江西 36 广西 45 西藏 54
河北 13 上海 31 山东 37 海南 46 陕西 61
山西 14 江苏 32 河南 41 重庆 50 甘肃 62
内蒙古 15 浙江 33 湖北 42 四川 51 青海 63
辽宁 21 安徽 34 湖南 43 贵州 52 宁夏 64
新疆 65 台湾 71 香港 81 澳门 82 国外 91
<script>
function validateId(sId){
var iSum=0
if(!/^(11|12|13|14|15|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)\d{17}(\d|x)$/i.test(sId))return false;
sId=sId.replace(/x$/i,"a");
for(var i = 17;i>=0;i --) iSum += (Math.pow(2,i) % 11) * parseInt(sId.charAt(17 - i),11)
return iSum%11==1
}document.write(validateId("330524198001010018"));
</script>
别忘了中间还有时间验证(出生日期)啊^_^
还有行政区划代码呢,
而且还不一定存在呢
所以只能说更准确ps.上例的\d{17} => \d {15}
<script>
var aCity=[];
aCity[11]="北京"
aCity[12]="天津"
aCity[13]="河北"
aCity[14]="山西"
aCity[15]="内蒙古"
aCity[21]="辽宁"
aCity[22]="吉林"
aCity[23]="黑龙江"
aCity[31]="上海"
aCity[32]="江苏"
aCity[33]="浙江"
aCity[34]="安徽"
aCity[35]="福建"
aCity[36]="江西"
aCity[37]="山东"
aCity[41]="河南"
aCity[42]="湖北"
aCity[43]="湖南"
aCity[44]="广东"
aCity[45]="广西"
aCity[46]="海南"
aCity[50]="重庆"
aCity[51]="四川"
aCity[52]="贵州"
aCity[53]="云南"
aCity[54]="西藏"
aCity[61]="陕西"
aCity[62]="甘肃"
aCity[63]="青海"
aCity[64]="宁夏"
aCity[65]="新疆"
aCity[71]="台湾"
aCity[81]="香港"
aCity[82]="澳门"
aCity[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));
if(!checkDate(sBirthday))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
}
function checkDate(str){
var d=new Date(str.replace(/-/g,"/"))
document.write(d.getFullYear()+"-"+ (d.getMonth()+1) + "-" + d.getDate());
return str==(d.getFullYear()+"-"+ (d.getMonth()+1) + "-" + d.getDate());
}document.write(cidInfo("380524198002300016"));
document.write(cidInfo("340524198002300019"))
document.write(cidInfo("340524197711111111"))
document.write(cidInfo("34052419800101001x"));</script>