let Wi = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1] // 加权因子
let letideCode = [1, 0, 10, 9, 8, 7, 6, 5, 4, 3, 2] // 身份证验证位值.10代表X
function IdCardletidate (idCard) {
idCard = trim(idCard.replace(/ /g, '')) // 去掉字符串头尾空格
if (idCard.length === 15) {
return isletidityBrithBy15IdCard(idCard) // 进行15位身份证的验证
} else if (idCard.length === 18) {
let aIdCard = idCard.split('') // 得到身份证数组
if (isletidityBrithBy18IdCard(idCard) && isTrueletidateCodeBy18IdCard(aIdCard)) { // 进行18位身份证的基本验证和第18位的验证
return true
} else {
return false
}
} else {
return false
}
}
/**
* 判断身份证号码为18位时最后的验证位是否正确
* @param aIdCard 身份证号码数组
* @return
*/
function isTrueletidateCodeBy18IdCard (aIdCard) {
let sum = 0 // 声明加权求和变量
if (aIdCard[17].toLowerCase() === 'x') {
aIdCard[17] = 10 // 将最后位为x的验证码替换为10方便后续操作
}
for (let i = 0; i < 17; i++) {
sum += Wi[i] * aIdCard[i] // 加权求和
}
let CodePosition = sum % 11 // 得到验证码所位置
if (aIdCard[17] === letideCode[CodePosition]) {
return true
} else {
return false
}
}
/**
* 验证18位数身份证号码中的生日是否是有效生日
* @param idCard 18位书身份证字符串
* @return
*/
function isletidityBrithBy18IdCard (idCard18) {
let year = idCard18.substring(6, 10)
let month = idCard18.substring(10, 12)
let day = idCard18.substring(12, 14)
let tempDate = new Date(year, parseFloat(month) - 1, parseFloat(day))
// 这里用getFullYear()获取年份,避免千年虫问题
if (tempDate.getFullYear() !== parseFloat(year) || tempDate.getMonth() !== parseFloat(month) - 1 || tempDate.getDate() !== parseFloat(day)) {
return false
} else {
return true
}
}
/**
* 验证15位数身份证号码中的生日是否是有效生日
* @param idCard15 15位书身份证字符串
* @return
*/
function isletidityBrithBy15IdCard (idCard15) {
let year = idCard15.substring(6, 8)
let month = idCard15.substring(8, 10)
let day = idCard15.substring(10, 12)
let tempDate = new Date(year, parseFloat(month) - 1, parseFloat(day))
// 对于老身份证中的你年龄则不需考虑千年虫问题而使用getYear()方法
if (tempDate.getYear() !== parseFloat(year) || tempDate.getMonth() !== parseFloat(month) - 1 || tempDate.getDate() !== parseFloat(day)) {
return false
} else {
return true
}
}
// 去掉字符串头尾空格
function trim (str) {
return str.replace(/(^\s*)|(\s*$)/g, '')
}
export default IdCardletidate
判断身份证号码
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 1、PHP根据身份证号码,获取性别。 2、PHP根据身份证号码,获取生日。 3、PHP根据身份证号码,计算年龄。 ...
- 1、简介 在App开发中,涉及到用户登录时,我们经常需要检验用户输入的账户是否是我们指定的类型。例如判断用户的账号...
- 适用于手机号,身份证号码,等敏感号码信息部分隐藏可自定义用来隐藏占位的字符、占位起始置位、和占位长度ps:同一个项...