validate.js 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. // 效验身份证号码
  2. export const isValidIdCard18 = (idCard) => {
  3. // 身份证号码正则表达式(18位)
  4. 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)$/
  5. // 校验长度,类型
  6. if (!regex.test(idCard)) {
  7. return false
  8. }
  9. // 提取出生年月日,并验证是否为有效日期
  10. var year = idCard.substring(6, 10)
  11. var month = idCard.substring(10, 12)
  12. var day = idCard.substring(12, 14)
  13. var date = new Date(year, month - 1, day)
  14. if (date.getFullYear() !== parseInt(year, 10) ||
  15. date.getMonth() !== parseInt(month, 10) - 1 ||
  16. date.getDate() !== parseInt(day, 10)) {
  17. return false
  18. }
  19. // 校验码部分
  20. var idCardBase = idCard.substring(0, 17)
  21. var weights = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
  22. var checkCodes = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2']
  23. var sum = 0
  24. for (var i = 0; i < idCardBase.length; i++) {
  25. sum += idCardBase[i] * weights[i]
  26. }
  27. var index = sum % 11
  28. var last = checkCodes[index]
  29. return last.toUpperCase() === idCard.substring(17).toUpperCase()
  30. }
  31. // 身份证号码转换*号
  32. export const maskNumber = (numberStr) => {
  33. if (numberStr.length < 2) {
  34. return numberStr
  35. }
  36. // 提取首尾字符
  37. const firstChar = numberStr[0]
  38. const lastChar = numberStr[numberStr.length - 1]
  39. const middleLength = numberStr.length - 2
  40. const middleStars = '*'.repeat(middleLength)
  41. return firstChar + middleStars + lastChar
  42. }