Как я могу получить следующую контрольную цифру, используя алгоритм Луна в javascript

У меня есть следующий код, который проверяет, допустимы ли определенные цифры, используя модуль алгоритма Луна 10.

function isCheckdigitCorrect(value) {
// accept only digits, dashes or spaces
  if (/[^0-9-\s]+/.test(value)) return false;

  var nCheck = 0, nDigit = 0, bEven = false;
  value = value.replace(/\D/g, "");

  for (var n = value.length - 1; n >= 0; n--) {
    var cDigit = value.charAt(n),
      nDigit = parseInt(cDigit, 10);

    if (bEven) {
      if ((nDigit *= 2) > 9) nDigit -= 9;
    }

    nCheck += nDigit;
    bEven = !bEven;
  }

  return (nCheck % 10) == 0;
}

Мне нужна другая функция, которая фактически генерирует следующую контрольную цифру, предоставляя четырехзначное число, чтобы 5-я цифра была контрольной суммой следующей цифры.


person pranvera hoti    schedule 24.04.2017    source источник
comment
Мне нужна другая функция Я понимаю, но можете ли вы опубликовать, что вы уже пробовали?   -  person evolutionxbox    schedule 24.04.2017
comment
Взгляните на gist.github.com/DiegoSalazar/4075533.   -  person Mohammad Kermani    schedule 24.04.2017
comment
@evolutionxbox я еще ничего не пробовал, потому что понятия не имею, как этого добиться, на самом деле я попробовал ту же функцию и немного изменил ее, но мне не повезло!   -  person pranvera hoti    schedule 24.04.2017
comment
@ M98 M98 это то, что у меня уже есть, эта функция проверяет правильность цифр на основе алгоритма Луна, мне нужно создать цифры, включая контрольную сумму   -  person pranvera hoti    schedule 24.04.2017
comment
@ M98 О, я вижу, что в комментариях ниже рассказывается, как его создать, сработало, спасибо :)   -  person pranvera hoti    schedule 24.04.2017
comment
@pranverahoti Не за что. Попробуйте вот это: gist.github.com/ShirtlessKirk/2134376   -  person Mohammad Kermani    schedule 24.04.2017
comment
@pranverahoti Знаете ли вы, что можете ответить на свой вопрос о переполнении стека? Давай, ответь на этот вопрос сам. Это может быть полезно для тех, кто нашел этот вопрос в Google. Когда вы ответите на это, дайте мне знать   -  person Mohammad Kermani    schedule 24.04.2017
comment
@M98 M98 Я ответил, в любом случае, кредиты должны принадлежать тебе!   -  person pranvera hoti    schedule 24.04.2017


Ответы (1)


Изменив текущую функцию на эту, я смог получить следующую контрольную цифру:

function getCheckDigit(value) {
  if (/[^0-9-\s]+/.test(value)) return false;

  var nCheck = 0, nDigit = 0, bEven = true;
  value = value.replace(/\D/g, "");

  for (var n = value.length - 1; n >= 0; n--) {
    var cDigit = value.charAt(n),
      nDigit = parseInt(cDigit, 10);

    if (bEven) {
      if ((nDigit *= 2) > 9) nDigit -= 9;
    }

    nCheck += nDigit;
    bEven = !bEven;
  }
  return (1000 - nCheck) % 10;
}
person pranvera hoti    schedule 24.04.2017
comment
Идеально! Приятно видеть, что вы впервые ответили на вопрос, вы также можете принять свой ответ как правильный ответ. Stack Overflow — это открытое сообщество, поэтому оно мне нравится. +1 для вас - person Mohammad Kermani; 24.04.2017