Como resolver?

O ponto chave aqui é a verificação do dígito a partir das regras definidas para a sua criação. Uma forma como podemos fazer isso é criando um dígito correto a partir das regras fornecidas e comparando com o dígito do número recebido.

Resolução

Para resolver o desafio podemos dividi-lo em duas partes, sendo a primeira a criação de um dígito verificador a partir dos 11 números e a segundo é a verificação do dígito de um determinado número. Para calcular o dígito basta aplicar as regras passadas. Uma forma mais prática de fazer isso é através de arrays, portanto nossa função pode esperar o recebimento de um array de 11 números.

function calculateDigit(arr) {  const step1 = arr.reduce((accum, current, index) => 
		index === 0 || index % 2 === 0 ? accum + current : accum, 0)
  const step2 = step1 * 3
  const step3 = step2 + arr.reduce((accum, current, index) => 
		index % 2 !== 0 ? accum + current : accum, 0)

  return step3 % 10 !== 0 ? 10 - step3 % 10 : 0
}

Uma vez tendo a função que calcula o dígito correto, tudo que precisamos é da função principal que irá receber um número e verificar o último dígito. Para conseguir isso podemos transformar o número em um array de números. Uma forma simples de fazer isso é convertendo-o para string, dividindo a string em um array e então convertendo novamente cada elemento do array para número. Após isso podemos extrair todos os elementos exceto o último para utilizá-los em nossa função de criação do dígito correto e então comparar o resultado com o último dígito do número recebido:

function checkVerificationDigit(num) {
  const numbersArray = num.toString().split('').map(Number)
  const numbersArrayWithoutDigit = numbersArray.slice(0, -1)

  const expectedDigit = calculateDigit(numbersArrayWithoutDigit)

  return expectedDigit === numbersArray[11]
}