function idCardValid(a) {
var c, d, e, f, g, h, b = a;
if ("" === b) return !1;
if (/^\d{17}[\dXx]$/.test(b) === !1) return !1;
if (c = [ 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 ], d = [ "1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2" ],
e = 0, f = 0, 15 == b.length) {
for (b = b.substr(0, 6) + "19" + b.substr(6), f = 0; 17 > f; f++) e += b.substr(f, 1) * c[f];
b += d[e % 11];
}
if (g = {
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:"国外"
}, void 0 == g[b.substr(0, 2)]) return !1;
if (h = [ b.substr(6, 4), b.substr(10, 2), b.substr(12, 2) ], h.push(new Date(h.join("-"))),
h.push(new Date().getFullYear()), h[3].getFullYear() != h[0] || h[3].getMonth() + 1 != h[1] || h[3].getDate() != h[2]) return !1;
if (h[4] - h[0] < 0 || h[4] - h[0] > 120) return !1;
if (15 == a.length) return !0;
for (f = 0; 17 > f; f++) e += b.substr(f, 1) * c[f];
return d[e % 11] == b.substr(17, 1);
}