123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- // 效验身份证号码
- export const isValidIdCard18 = (idCard) => {
- // 身份证号码正则表达式(18位)
- var regex = /^[1-9]\d{5}(18|19|20)\d{2}((0[1-9])|(10|11|12))(([012]\d)|3[01])\d{3}(\d|X|x)$/
- // 校验长度,类型
- if (!regex.test(idCard)) {
- return false
- }
- // 提取出生年月日,并验证是否为有效日期
- var year = idCard.substring(6, 10)
- var month = idCard.substring(10, 12)
- var day = idCard.substring(12, 14)
- var date = new Date(year, month - 1, day)
- if (date.getFullYear() !== parseInt(year, 10) ||
- date.getMonth() !== parseInt(month, 10) - 1 ||
- date.getDate() !== parseInt(day, 10)) {
- return false
- }
- // 校验码部分
- var idCardBase = idCard.substring(0, 17)
- var weights = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
- var checkCodes = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2']
- var sum = 0
- for (var i = 0; i < idCardBase.length; i++) {
- sum += idCardBase[i] * weights[i]
- }
- var index = sum % 11
- var last = checkCodes[index]
- return last.toUpperCase() === idCard.substring(17).toUpperCase()
- }
- // 身份证号码转换*号
- export const maskNumber = (numberStr) => {
- if (numberStr.length < 2) {
- return numberStr
- }
-
- // 提取首尾字符
- const firstChar = numberStr[0]
- const lastChar = numberStr[numberStr.length - 1]
- const middleLength = numberStr.length - 2
- const middleStars = '*'.repeat(middleLength)
-
- return firstChar + middleStars + lastChar
- }
|