2 заметки с тегом

javascript

2017   javascript   typeof

Проверка контрольной суммы СНИЛС и ИНН на Javascript

Начнем со СНИЛС: напомню, маска при заполнении будет выглядеть так:
XXX-XXX-XXX XX
Если стоит вопрос какой маской воспользоваться на фронте, посмотрите в сторону Mask Plugin
Функция будет выглядеть следующим образом:

function(value) {
  var pattern = /^(\d{3})\-(\d{3})\-(\d{3})\s(\d{2})$/
  var isTrueLength = value.replace(/\D/gm, '').length == 11

  if (!isTrueLength || !pattern.test(value)) {
    return false
  }

  var valueClean = value.replace(/-/g, "");
  var valueFinal = valueClean.replace(" ", "");

  var checkSum = parseInt(valueFinal.slice(9), 10);

  // представить строку как массив (для старых браузеров)
  valueFinal = "" + valueFinal;
  valueFinal = valueFinal.split('');

  var sum = (
    valueFinal[0] * 9 +
    valueFinal[1] * 8 +
    valueFinal[2] * 7 +
    valueFinal[3] * 6 +
    valueFinal[4] * 5 +
    valueFinal[5] * 4 +
    valueFinal[6] * 3 +
    valueFinal[7] * 2 +
    valueFinal[8] * 1
  );

  if (sum < 100) {
    return sum == checkSum
  }

  if (sum == 100 || sum == 101) {
    return checkSum == 0;
  }

  if (sum > 101) {
    return (sum % 101 == checkSum || (sum % 101 == 100 && checkSum == 0));
  }
}

Для проверки контрольной суммы ИНН можете использовать нижеследующую функцию:

function(value) {
  var pattern = /^(\d{10,12})$/
  if (!pattern.test(value)) {
    return false
  }

  // преобразуем в строку
  var valueFinal = "" + value;

  // преобразуем в массив
  valueFinal = valueFinal.split('');

  //для ИНН в 10 знаков
  if ((valueFinal.length == 10) && (valueFinal[9] == ((
    2 * valueFinal[0] + 4 * valueFinal[1] + 10 * valueFinal[2]
    + 3 * valueFinal[3] + 5 * inputNumvalueFinalber[4] + 9 * valueFinal[5]
    + 4 * valueFinal[6] + 6 * valueFinal[7] + 8 * valueFinal[8])
    % 11) % 10)){
    return true;
    //для ИНН в 12 знаков
  }

  if ((valueFinal.length == 12) && ((valueFinal[10] == ((
    7 * valueFinal[ 0] + 2 * valueFinal[1] + 4 * valueFinal[2]
    + 10 * valueFinal[3] + 3 * valueFinal[4] + 5 * valueFinal[5]
    + 9 * valueFinal[6] + 4 * valueFinal[7] + 6 * valueFinal[8]
    + 8 * valueFinal[9]) % 11) % 10) && (valueFinal[11] == ((
      3 * valueFinal[ 0] + 7 * valueFinal[1] + 2 * valueFinal[2]
      + 4 * valueFinal[3] + 10 * valueFinal[4] + 3 * valueFinal[5]
      + 5 * valueFinal[6] + 9 * valueFinal[7] + 4 * valueFinal[8]
      + 6 * valueFinal[9] + 8 * valueFinal[10]) % 11) % 10))){
    return true;
  }
  return false;
}
2016   javascript   js   mask   ИНН   СНИЛС