支持15和18位

function isIdCard(idcard) { idcard = idcard.toUpperCase() let regx = /(^\d{15}$)|(^\d{17}([0-9]|X)$)/ if (regx.test(idcard) === false) { return false; } //检查15位 if (idcard.length == 15) { regx = /^(\d{6})+(\d{2})+(\d{2})+(\d{2})+(\d{3})$/; let arr_split = idcard.match(regx) let dtm_birth = "19" + arr_split[2] + '-' + arr_split[3] + '-' + arr_split[4]; if (isNaN(dtm_birth) && !isNaN(Date.parse(dtm_birth))) { return true; } else { return false; } } else { //检查18位 regx = /^(\d{6})+(\d{4})+(\d{2})+(\d{2})+(\d{3})([0-9]|X)$/; let arr_split = idcard.match(regx) let dtm_birth = arr_split[2] + '/' + arr_split[3] + '/' + arr_split[4]; //检查生日日期是否正确 if (isNaN(dtm_birth) && !isNaN(Date.parse(dtm_birth))) { //检验18位身份证的校验码是否正确。 校验位按照ISO 7064:1983.MOD 11-2的规定生成,X可以认为是数字10。 let arr_int = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2] let arr_ch = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'] let sign = 0; for (let index = 0; index < 17; index++) { let b = idcard[index] * 1; let w = arr_int[index]; sign += b * w; } let n = sign % 11; let val_num = arr_ch[n]; if (val_num != idcard.substr(17, 1)) { return false; } else { return true; } } else { return false } } } [/prism]
说点什么
支持Markdown语法
好耶,沙发还空着ヾ(≧▽≦*)o
Loading...