大陆居民赴台,Javascript校验中华人民共和国大陆居民18

18位身份证号码是算法:
1,∑(a*W) mod 11 ( i = 2, 3, ..., 18 ) (1) ;
2,加权因子分别为 Wi: 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2 ;
3,将前17位号码分别乘以各自的加权因子,再求和除以11,再取余数。
4,用余数对应下方的校验码
5,Y余数 : 0 1 2 3 4 5 6 7 8 9 10 ;
6,校验码: 1 0 X 9 8 7 6 5 4 3 2 ;
举例:
首先将你的身份证前17位取出后,做如下操作:
第一位乘以7,第二位乘以9……,第十七位乘以2
7,9……2是加权因子,对应如下:
Wi: 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2
然后把这十七位数字乘以加权因子后的结果相加,除以11!
将余数所对应的校验码赋值给第18位
如果你所输入的身份证号码是 440102219901010019 (以这个为例)
那么计算方法如下
4*7+4*9+0*10+……1*2,结果我不愿意去算了,假设结果是x
那么将这个x的值除以11,余数是3
那么我的身份证第18位对应的就是9
所以如果我输入的身份证是 440102219901010019 ,和我们取前17位计算出的结果一致,那么,身份证验证就OK了。
我写了个范例如下:
<script type="text/javascript">
function chksfz(sd)
{
var sid=sd;
if (sid.length != 18){return false;}
var ysid=sid;
sid=sid.substring(0,17);
var jiaquan = new Array(7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2);
var jiaoyan = new Array('1','0','X','9','8','7','6','5','4','3','2');
var sigma=0;
for (var i = 0;i < 17;i++) {sigma +=parseInt(sid)*jiaquan;}
if (sid+jiaoyan[(sigma % 11)]==ysid){return true;}
else{return false;}
}
if (!chksfz("440102219901010019")){alert('身份证号码必须满18位,切必须为真实有效号码!');}
else {alert('OK');}
</script>
不明白算法的同学也没事,直接把函数的代码复制进去,直接使用这个函数也是一样的,chksfz(sd)这个函数返回的是布尔值,sd是字符串!
Tags:  大陆居民往来港澳 大陆居民移民香港 大陆居民前往台湾 大陆居民炒港股 大陆居民赴台

延伸阅读

最新评论

发表评论