Skip to content
do- edited this page Sep 21, 2024 · 26 revisions

Check — базовый класс для расчёта контрольных сумм и, попутно, проверки строк на соответствие числовому формату, а также генерации корректных случайных кодов.

Все строки, обрабатываемые Check, должны:

  • быть фиксированной длины (totalLength);
  • состоять только из цифр (0..9);
  • иметь постфикс фиксированной длины checkSumLength, вычисляемый по как остаток от деления некоторой функции от последовательных цифр предшествующей части строки на на 10..01 и 10..0 соответствующей длины.

Конкретные функции для вычисления контрольных сумм определены в потомках Check: ScalarProduct и Horner, однако сам он напрямую используется для проверки и генерации кодов КПП.

Конструктор

 const c = new Check (totalLength, checkSumLength)

Смысл параметров такой же, как у одноимённых полей.

Поля

Имя Описание
totalLength Общее количество цифр в коде
checkSumLength Количество цифр в контрольной сумме
valueLength Количество цифр в коде за вычетом контрольной суммы
modulus1 знаменатель для первого деления с остатком: modulus2 + 1 (то есть 11 для односимвольного контрольного числа)
modulus2 знаменатель для окончательного деления с остатком: для checkSumLength >=1 — 10 в степени checkSumLength (то есть 10 для односимвольного контрольного числа)

Методы

Вычисление контрольной суммы

checkSum (str, checkAllDigits)

Устанавливает this.sum=0, вызывает process (str), после чего выдаёт остаток от деления на modulus+1 и потом на modulus в виде строки, дополненной слева нулями до необходимой длины.

process (str)

Проходит в цикле первые valueLength символов строки, для каждого из них проверяет, является ли он цифрой и вызывает метод processDigit (pos, digit).

processDigit (pos, digit)

Этот метод вызывается по ходу process (см. ниже) для цифры digit, обнаруженной по индексу pos. В базовой реализации не делает ничего.

Проверки и оформление ошибок

mustBeEqual (asis, tobe, code)

Если asis отличается от tobe, выдаёт ошибку "Invalid ${code}" с дополнительными полями {asis, tobe, code}.

raise (message, options)

Выдаёт ошибку с сообщением message, дополненную полями из options.

verify (str)

Проверяет:

  • строка ли на входе
  • требуемая ли у неё длина
  • совпадают ли её последние checkSumLength символов к контрольной суммой.

Генерация случайных кодов

appendCheckSum (str)

Если str — строка цифр длины valueLength, то возвращает её с добавленной на конце контрольной суммой.

random ()

Генерирует случайный код, проходящий проверку контрольной суммы (композиция appendCheckSum (randomValue ())).

randomValue ()

Генерирует строку длины valueLength из случайных цифр.

Clone this wiki locally