7.ISBN 转换与生成-第十四届蓝桥杯web应用开发--省赛

分析

类型:JavaScript
分数:20分
难度:难

考点

  • 掌握正则表达式
  • 字符串 api 的使用

解题思路

第一题:使用正则表达式,替换 非数字和非大写X 的字符串为 空字符串

第二题:循环取出前9个字符,转成数字,依次与 1-9 进行乘法,还要累加求和,最后求除以11的余数,判断是否符合 ISBN10 字符串

第三题:表示从头(包含)开始截取,一直截取到最后一个字符(不包含),然后根据题目要求计算结果,转化为 ISBN-13 字符串

实现

第一题

修改 index.js 文件:

// 将用户输入的带分隔符的 isbn 字符串转换只有纯数字和大写 X 字母的字符串
// 入参 str 为转换为包含任意字符的字符串
function getNumbers(str) {
  // TODO: 待补充代码
  // 使用正则表达式,替换 非数字和非大写X 的字符串为 空字符串
  const res = str.replace(/[^\d|X]/g,"");
  return res;
}

第二题

修改 index.js 文件:

// 验证当前 ISBN10 字符串是否有效
// 入参 str 为待判断的只有纯数字和大写 X 字母的字符串
function validISBN10(str) {
  // TODO: 待补充代码

  const res = /^\d{9}.$/.test(str)
  // console.log("正则表达式校验:",res)
  if(res){
    // 循环取出前9个字符,转成数字,依次与 1-9 进行乘法,还要累加
    let sum = 0
    for(let i = 0;i<=8;i++){
      sum += (i+1) * parseInt(str.charAt(i))
    }
    // 除以11的余数
    const res2 = sum % 11

    if( res2 == 10 && str.charAt(9) === 'X'){
      return true
    }else if(res2 != 10 && str.charAt(9) == res2){
      return true
    }else{
      return false
    }
  }else{
    return false
  }
}

第三题

修改 index.js 文件:

// 将用户输入的 ISBN-10 字符串转化为 ISBN-13 字符串
// 入参 isbn 为有效的 ISBN-10 字符串
function ISBN10To13(isbn) {
  // TODO: 待补充代码
  // slice(0,-1) 表示从头(包含)开始截取,一直截取到最后一个字符(不包含)
  const isbn12 = "978" + isbn.slice(0,-1)
  let sum = 0
  for(let i = 0;i<=11;i++){
    if( (i+1) % 2 === 0){ // 偶数位
      sum += 3 * parseInt( isbn12.charAt(i) )
    }else{ // 奇数位
      sum += 1 * parseInt( isbn12.charAt(i) )
    }
  }
  const res = sum % 10
  if( res == 0){
    return isbn12 + "0"
  }else{
    return isbn12 + (10 - res)
  }
}

原文出处:/show_1GWMfboUQrt.html