UNPKG

t-comm

Version:

专业、稳定、纯粹的工具库

36 lines (34 loc) 1.09 kB
/** * 判断是否合法的身份证号 * 除了基本的格式校验外,还检查了第18位是否合法,方法如下: * - 逆序排列,放到数组 list 中 * - x/X 代表数字10 * - 遍历 list,累加 `item * ((2 ** index) % 11)`,item 为list的每一位,index为下标值 * - 将上一步的累加和余11,判断是否等于1 * * @param {string} idCard 输入字符串 * @example * isIdCard('123') * // false * * isIdCard('34052419800101001X') * // true */ function isIdCard(idCard) { var regExp = /^[1-9]\d{5}(18|19|20)\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/; return regExp.test("".concat(idCard)) && validateMoreIdCard("".concat(idCard)); } function validateMoreIdCard(str) { var list = str.split('').reverse().map(function (val, index) { if (index === 0 && val.toUpperCase() === 'X') { return '10'; } return val; }); var res = 0; list.forEach(function (item, index) { return res += +item * (Math.pow(2, index) % 11); }); return res % 11 === 1; } export { isIdCard, validateMoreIdCard };