js根据身份证最后一位判断身份证号的真假

<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
<title>验证身份证的真假</title>
<style>
* {
padding: 0;
margin: 0;
}

#box>input {
display: block;
width: 200px;
padding: 0 10px;
height: 40px;
margin: 200px auto;
}
</style>
</head>


<body>
<div style='max-width:600px;height:600px;margin:0 auto;' id='box'>
<input type="text" maxlength='18' id='userId' placeholder='请输入正确的身份证号码' />
</div>


</body>


</html>
<script>

/*
身份证第18位计算法 身份证第18位(校验码)的计算方法
1、将前面的身份证号码17位数分别乘以不同的 系数。
从第一位到第十七位的系数分别为:  7-9-10-5-8-4-2-1-6-3-7-9-10-5-8-4-2
2、将这17位数字和系数相乘的结果相加 
3、用加出来和除以11,看余数是多少? 
4、余数只可能有0-1-2-3-4-5-6-7-8-9-10这11个数字。
其分别对应的最后 一位身份证的号码为 
1-0-X-9-8-7-6-5-4-3-2。
5、通过上面得知如果余数是2,就会在身份证的第18位数字上出现罗马数字的Ⅹ。如果余数是10,身份证的最后一位号码就是2。
例如:某男性的身份证号码是34052419800101001X
首先我们得出前17位的乘积和是189,然后用189除以11得出的结果是17+2/11,也就是说其余数是2。最后通过对应规则就可以知道余数2对应的数字是x。所以,可以判定这是一个合格的身份证号码


*/
window.onload = function() {
// 存储身份证号码的前17位的数字
var arrUser = null
// 存储乘积后的信息到数组里
var arrJi = []
//要乘的系数 固定写法
var xiS = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
// 可能出现的余数
var yuNum = [0,1,2,3,4,5,6,7,8,9,10]
// 余数对应的最后一位身份证号码
var lastNum = [1,0,'x',9,8,7,6,5,4,3,2]
function adds(x, y) {
return x + y
}
// 当change事件改变时获取身份证号码
document.getElementById('userId').onchange = function(){
// 获取输入的身份证号码
var userId = document.getElementById('userId').value
if(userId===''){
return false;
}
// 计算身份证号码的长度
var len = userId.length
// 取出身份证最后一位号码
var  lastValue = document.getElementById('userId').value.split('')[len-1]
if(len===15||len===18){
// 取得身份证除去最后一位的所有号码并将其专为数组
arrUser = document.getElementById('userId').value.split('').slice(0,-1)
for(var i=0;i<17;i++){
// 将相乘后的积数存入提前声明好的数组中
arrJi.push( arrUser[i]*xiS[i] )
}
// 求出arrJi的所有参数的和
var arrJiLast = arrJi.reduce(adds)
// 系数乘以身份证前17位数字的积的和,除以11后的余数
var yuLast = arrJiLast%11
for(var j=0;j<yuNum.length;j++){
if(yuLast===yuNum[j] ){
// 用的是===统一下数据类型
var lastSf = lastNum[j].toString()
if(lastSf===lastValue){
alert('身份证号码是对的')
}else{
alert('您的身份证号码有误')
}
}
}

}else{
alert('请输入正确的身份证号码')
}
}
}
</script>
阅读更多

没有更多推荐了,返回首页