Created
June 14, 2016 04:26
-
-
Save LiuJi-Jim/75288ec974f4a06cd1a9aef1f9976fb4 to your computer and use it in GitHub Desktop.
id-num gen
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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