Модульная арифметика в чексуммах
Модульная арифметика ещё постоянно рядом с нами там, где нужны проверки. В обычной записи или счёте довольно легко ошибиться на плюс-минус один, но довольно сложно сразу перескачить через порядок. Поэтому зашифровать в айдишник чего-либо остаток от деления на предыдущие числа, чтобы проверить, не было ли каких-то ошибок (а иногда даже использовать полученную информацию, чтобы эти ошибки скорректировать) — отличная тема.
Одна из таких проверок зашита в коды на книжках. Любая книжка выпущенная после 2007 года имеет свой ISBN-13 код, обычно он расположен над штрихкодом. Это как паспорт для книги, только вместо фотографии — 13 цифр. Последняя цифра при этом — чек-сумма, надо только знать как считать. До 2007 цифр было 10 и алгоритм был немного сложнее, но суть была похоже, там тоже была "вшита" проверка.
Алгорим расчёта чексуммы для ISBN-13
1️⃣ Берём первые 12 цифр кода
2️⃣ Попеременно складываем их, каждую нечётную умножая на 1, каждую чётную на 3 (потому что ISBN-13)
3️⃣ У получившегося числа берём остаток от деления на 10 (по совместительству — последняя цифра получившейся суммы). Привет, модульная арифметика!
4️⃣ Если получился 0 — то последняя цифра из ISBN-13 должна быть 0. Если нет, то в сумме с последней цифрой ISBN-13 должно получиться 10.
Последние два шага можно записать как один: посчитай (10 - (s mod 10)) и проверь, совпало ли с последней цифрой-чексуммой, где s — sобственно sумма из предыдущего шага