UNPKG

idcard-parse-utils

Version:
2 lines (1 loc) 1.3 kB
function e(e){const t=String(e);if(!/^(^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$)|(^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])((\d{4})|\d{3}[X])$)$/.test(t))return!1;if(!{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:"国外"}[Number(t.slice(0,2))])return!1;if(18!==t.length)return!1;{const e=new RegExp(/^(\d{6})(\d{4})(\d{2})(\d{2})(\d{3})([0-9]|X)$/),r=t.match(e);if(!r)return!1;if(!function(e,t,r){const n=Number(e),u=Number(t),i=Number(r),d=(new Date).getTime();if(new Date(`${n}-${u}-${i}`).getTime()>d)return!1;if((new Date).getFullYear()-n>150)return!1;if(u<1||u>12)return!1;const f=new Date(n,u,0);if(i<1||i>f.getDate())return!1;return!0}(r[2],r[3],r[4]))return!1}if(18===t.length){const e=[7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2],r=["1","0","X","9","8","7","6","5","4","3","2"];let n=0;for(let r=0;r<17;r++)n+=Number(t.charAt(r))*e[r];if(r[n%11]!==t[17])return!1}return!0}export{e as checkPsidno};