Skip to content

Instantly share code, notes, and snippets.

@smallyunet
Created May 15, 2020 07:13
Show Gist options
  • Save smallyunet/1c45285631220fc7069d05de04c83338 to your computer and use it in GitHub Desktop.
Save smallyunet/1c45285631220fc7069d05de04c83338 to your computer and use it in GitHub Desktop.
身份证号码校验位的校验算法
// 验证身份证号码的算法
// 可以根据规则找出校验位合规的身份证号
let generatorIdNumber = (x) => {
// 目前是 16位 + 2位
let str = '1111111111111111' + x
// 字符值
let a = str.split('').map(i => parseInt(i))
// 权重银子
let w = []
for (let i = 1; i <= 18;i++) {
w.push(Math.pow(2, i-1) % 11)
}
w.reverse()
// 计算权重和
let n = 0
for (let i = 0; i < 18;i++) {
let t = a[i] * w[i]
if (t > 0)
n += t
}
n %= 11
// 返回合规的号码
if (n == 1 && str.length == 18)
return str
}
// 运行测试
for (let i = 10; i < 99; i++) {
let r = genatorIdNumber(i)
if (r != undefined)
console.log(r)
}
/* 生成结果
111111111111111110
111111111111111129
111111111111111137
111111111111111145
111111111111111153
111111111111111161
111111111111111188
111111111111111196
*/
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment