Skip to content

Instantly share code, notes, and snippets.

@LiuJi-Jim
Created June 14, 2016 04:26
Show Gist options
  • Save LiuJi-Jim/75288ec974f4a06cd1a9aef1f9976fb4 to your computer and use it in GitHub Desktop.
Save LiuJi-Jim/75288ec974f4a06cd1a9aef1f9976fb4 to your computer and use it in GitHub Desktop.
id-num gen
var factors = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
var tails = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2']
var provinceMap = {
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: '国外 '
}
var provinces = Object.keys(provinceMap)
var monthDays = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
function rand(min, max) {
if (max === undefined) {
max = min
min = 0
}
return Math.floor(Math.random() * (max - min)) + min
}
function pad(n) {
if (n < 10) {
return '0' + n.toString(10)
}
return n.toString(10)
}
function gen() {
var ret = ''
// 省
ret += provinces[rand(provinces.length)]
// 地
ret += pad(rand(30))
// 市
ret += pad(rand(30))
// 年
var year1 = rand(19, 20)
ret += pad(year1)
var year2 = year1 === 19 ? rand(40, 100) : rand(0, 16)
ret += pad(year2)
// 月
var month = rand(1, 13)
ret += pad(month)
// 闰年就无视了
var day = rand(monthDays[month])
ret += pad(day)
// 最后
for (var i = 0; i < 3; ++i) {
var digit = rand(10).toString(10)
ret += digit
}
return ret
}
var num = process.argv[2]
if (!num || num.length !== 17) {
// console.log('node id-card.js xxxxxxxxxxxxxxxxx (17 digits)')
// return
num = gen()
}
console.log('input:', num + '*')
var checksum = num.split('')
.map(s => parseInt(s, 10))
.reduce((sum, cur, i) => sum + cur * factors[i], 0)
console.log('checksum:', checksum);
var mod = checksum % 11
var tail = tails[mod]
console.log('mod:', mod)
console.log('tail:', tail)
console.log('[Result]')
console.log(num + tail)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment