-
Notifications
You must be signed in to change notification settings - Fork 0
Check
Check — базовый класс для расчёта контрольных сумм и, попутно, проверки строк на соответствие числовому формату, а также генерации корректных случайных кодов.
Все строки, обрабатываемые Check, должны:
- быть фиксированной длины (
totalLength); - состоять только из цифр (
0..9); - иметь постфикс фиксированной длины
checkSumLength, вычисляемый по как остаток от деления некоторой функции от последовательных цифр предшествующей части строки на 11 и 10 (дляcheckSumLength == 1) или на 101 и 100.
Конкретные функции для вычисления контрольных сумм определены в потомках Check, однако сам он напрямую используется для проверки и генерации кодов КПП.
const c = new Check (totalLength, checkSumLength)Смысл параметров такой же, как у одноимённых полей.
| Имя | Описание |
|---|---|
totalLength |
Общее количество цифр в коде |
checkSumLength |
Количество цифр в контрольной сумме |
valueLength |
Количество цифр в коде за вычетом контрольной суммы |
Этот метод вызывается по ходу process (см. ниже) для цифры digit, обнаруженной по индексу pos. В базовой реализации не делает ничего.
Проходит в цикле первые либо totalLength (checkAllDigits == true), либо valueLength (!checkAllDigits) символов строки, для каждого из них проверяет, является ли он цифрой и для первых valueLength вызывает метод processDigit (pos, digit).
Режим checkAllDigits == true применяется для проверки кодов, checkAllDigits == false — для генерации (когда проверять формат постфикса не имеет смысла).
Устанавливает this.sum=0, вызывает process (str, checkAllDigits), после чего выдаёт остаток от деления на на 11 и 10 (для checkSumLength == 1) или на 101 и 100 в виде строки, дополненной слева нулями до необходимой длины.
Вычисляет контрольную сумму и проверяет, совпала ли она к концом строки.